2012-01-30 9 views
6

名詞を単数形から複数形に変更する関数はSQL Serverにはありますか?名詞を複数形にするSql関数

+4

複数の不規則性のために、それは難しいでしょう(とにかく英語で)。猫 - >猫、マウス - >マウス、ガチョウ - >ガチョウ、人 - >人... –

+0

どの言語で? :)確かに、標準は存在しません。 –

+1

与えられた言語の文法を理解するSQL関数はありますか?いいえ:) – MatBailie

答えて

4

SQL Serverにその関数は存在しません。

0

いいえ、確認する単語の数が限られている場合は、テーブルを作成するのはかなり簡単です。

例:

CREATE TABLE dbo.Plurals 
( 
    id int IDENTITY, 
    singular varchar(100), 
    plural varchar(100) 
) 

INSERT INTO dbo.Plurals 
VALUES 
('cat', 'cats'), 
('goose', 'geese'), 
('man', 'men'), 
('question', 'questions') 

また、あなたはテーブルだけの例外、sの単純な加算と複数形することはできませんつまり、言葉も作ることができます - あなたはその上EXISTSチェックを行うことができますテーブルがない場合はsを追加し、複数の場合はルックアップします。

4

SQL自体にはこのようなものはありませんが、.NET 4で導入された.NET PluralizationServiceを使用することもできます。Entity Frameworkがテーブル名をオブジェクト名に複数化/特異化するのと同じ機能です。

複数化サービスを活用するには、SQL-CLRアセンブリを作成する必要がありますが、これは間違いなく実行可能なもののようです。

+0

+1 - いいです、それについては分かりませんでした。 – JNK

+0

SQL Server CLRで.NET 4.0アセンブリを使用することは可能ですか? –

+1

@MartinSmith - SQL CLRは現在(SQL 2008R2)、フレームワークのバージョン3.5に制限されています。 System.Data.EntityDesignアセンブリは4.0をターゲットにしています(下の私の答えを参照してください) – EBarr

2

@aFが指摘しているように、この関数はSQL Serverに存在しません。存在する場合、私が知っている1つの場所は、Entity Framework 4+です。複数化オブジェクトは、実際にはinstantiated and usedとすることができる。

SQLには、SQL CLRを介してCLRコードを実行する能力があります。主な問題は、SQL CLRが.NET Framework 3.5に限定されていることです。したがって、あなたのテーブルで動作する.net 4コードを書く必要があります。また、Reflectorのような製品を使用し、3.5互換バージョンをリバースエンジニアリングしてSQL Server内で実行することもできます。

2
CREATE FUNCTION dbo.Pluralize 
(
    @noun nvarchar(50) 
) 
RETURNS nvarchar(50) 
AS 
BEGIN 

DECLARE @QueryString nvarchar(4000) 
SET @QueryString = N'FORMSOF(INFLECTIONAL,"' + @noun + N'")' 
RETURN 
(SELECT TOP 1 display_term 
FROM sys.dm_fts_parser(@QueryString,1033,0,0)) 

END 
GO 

SELECT noun, 
     dbo.Pluralize(noun) 
FROM (VALUES('cat'), 
       ('mouse'), 
       ('goose'), 
       ('person'), 
       ('man'), 
       ('datum')) nouns(noun) 

戻り

noun 
------ ------------------------------ 
cat cats 
mouse mice 
goose geese 
person persons 
man men 
datum data 

残念ながらそれだけで名詞のためのTOP 1拡張用語が複数形であるという観察に依存しています。私はこれがどこにでも書かれているのではないかと疑う。

0

これは表示に使用しますか?以下のような
サムシング/ "の検索返された4つの結果" "あなたの検索では、1つの結果を返されましたか"?

「はい」の場合は、そのようにはしません。
すべての特殊なケース(正しくは複数の言語ではありません)で正しくこれを行う関数を見つけたり書き込んだりするのはほとんど不可能です。必要なテキストをそれぞれ単数形と複数形に一度格納することはあまり良くありません。仕事で

、私はこのような動的に生成された文章の複数の言語やたくさんの多くを扱っている、と私は完全にすべてで単数/複数形の区別を回避することが管理する最も簡単な解決策であることが判明:

「この検索の結果の数:1

2
DECLARE @PluralVersion nvarchar(128) = '' 
    DECLARE @TableName nvarchar(128) = 'MyTableName'   
    DECLARE @NounVersions TABLE(Term nvarchar(128) NOT NULL) 
    DECLARE @QueryString nvarchar(4000) SET @QueryString = N'FORMSOF(INFLECTIONAL,"' + @TableName + N'")' 
    INSERT INTO @NounVersions 
    SELECT TOP 10 display_term FROM sys.dm_fts_parser(@QueryString,1033,0,0) 
    SELECT TOP 1 @PluralVersion = Term FROM @NounVersions WHERE Term Not Like '%''%' AND RIGHT(Term,1) = 's' 
    SET @PluralVersion = UPPER(LEFT(@PluralVersion,1))+LOWER(SUBSTRING(@PluralVersion,2,LEN(@PluralVersion))) 
    SELECT @PluralVersion 

私は、これは古いスレッドですけど、私はとにかく投稿するだろうと思いました。 Martinが始めたことに基づいて、私はそれを拡張し、それまではOKの仕事をしています。私はそれが完璧だとは言いません。これはテーブル名を複数形にするために使用されているため、非常に制御されています。

関連する問題