Fonction Sql pour rendre pluriel le nom

Existe-t-il une fonction dans SQL Server qui change le nom du singulier au pluriel?

Cette fonction n'existe pas dans SQL Server.

SQL lui-même n'a rien de pareil – mais vous pouvez essayer d'utiliser .NET PluralizationService introduit dans .NET 4 – la même fonctionnalité que Entity Framework utilise pour pluraliser / singulariser les noms de tables aux noms d'objects.

Vous auriez à écrire un assembly SQL-CLR pour puiser dans les services de pluralisation, mais cela semble définitivement faisable!

La fonction n'existe pas dans SQL Server, comme @aF mentionné. Le seul endroit que je connais s'il existe dans Entity Framework 4+. L'object de pluralisation peut réellement être instancié et utilisé .

SQL a la capacité d'exécuter du code CLR – via SQL CLR. Le principal problème est que SQL CLR est limité à .NET Framework 3.5. Donc vous auriez besoin d'écrire du code .net 4 qui fonctionne sur vos tables. Alternativement, vous pouvez utiliser un produit comme Reflector et inverser une version compatible 3.5 et l'exécuter dans SQL Server.

CREATE FUNCTION dbo.Pluralize ( @noun nvarchar(50) ) RETURNS nvarchar(50) AS BEGIN DECLARE @QuerySsortingng nvarchar(4000) SET @QuerySsortingng = N'FORMSOF(INFLECTIONAL,"' + @noun + N'")' RETURN (SELECT TOP 1 display_term FROM sys.dm_fts_parser(@QuerySsortingng,1033,0,0)) END GO SELECT noun, dbo.Pluralize(noun) FROM (VALUES('cat'), ('mouse'), ('goose'), ('person'), ('man'), ('datum')) nouns(noun) 

Résultats

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

Malheureusement, il repose simplement sur l'observation que le terme d'expansion TOP 1 pour le nom est la forme plurielle. Je doute que cela soit documenté n'importe où.

  DECLARE @PluralVersion nvarchar(128) = '' DECLARE @TableName nvarchar(128) = 'MyTableName' DECLARE @NounVersions TABLE(Term nvarchar(128) NOT NULL) DECLARE @QuerySsortingng nvarchar(4000) SET @QuerySsortingng = N'FORMSOF(INFLECTIONAL,"' + @TableName + N'")' INSERT INTO @NounVersions SELECT TOP 10 display_term FROM sys.dm_fts_parser(@QuerySsortingng,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 

Je sais que c'est un vieux fil, mais j'ai pensé que je postrais de toute façon. Basé sur ce que Martin a commencé, je l'ai élargi et jusqu'à présent, il fait un bon travail. Je ne dirais pas que c'est parfait. Ceci est utilisé pour le pluralisme des noms de tables, donc il est très contrôlé

Non, mais il serait assez facile de faire une table pour cela si vous avez un set limité de mots à vérifier.

Exemple:

 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') 

Alternativement, vous pourriez faire de la table juste des exceptions, c'est-à-dire des mots qui ne peuvent pas être multipliés avec la simple addition d'un s – alors vous pouvez faire une vérification EXISTS sur cette table, si elle n'est pas là puis chercher le pluriel.

Voulez-vous l'utiliser à des fins d'affichage?
Quelque chose comme " Votre search a returnné 1 résultat " / " Votre search a donné 4 résultats "?

Si oui, je ne le ferais pas comme ça.
Trouver ou écrire une fonction qui le fait correctement pour tous les cas particuliers (et encore less dans plusieurs langues) est presque impossible, et stocker chaque text nécessaire une fois au singulier et une fois au pluriel n'est pas beaucoup mieux.

Au travail, j'ai affaire à plusieurs langues et beaucoup de phrases générées dynamicment comme ça, et j'ai trouvé qu'éviter complètement la distinction des forms singulier / pluriel est la solution la plus simple à gérer:

" Nombre de résultats pour cette search: 1 "