Esiste una funzione in SQL Server che modifica il nome dalla forma singolare a quella plurale?Funzione Sql per rendere sostantivo plurale
risposta
Questa funzione non esiste in SQL Server.
No, ma sarebbe abbastanza facile creare un tavolo per questo se si dispone di un numero limitato di parole da controllare.
Esempio:
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')
In alternativa, si potrebbe creare il tavolo solo essere eccezioni, vale a dire parole che non possono essere pluralizzata con la semplice aggiunta di un s
- allora si potrebbe fare un EXISTS
controllo su quel tabella, se non è lì quindi aggiungere un s
e se è quindi cercare il plurale.
SQL non ha nulla di simile - ma si può provare a utilizzare .NET PluralizationService introdotto in .NET 4, la stessa funzionalità utilizzata da Entity Framework per pluralizzare/singolare i nomi di tabelle per i nomi di oggetto.
Si dovrebbe scrivere un assembly SQL-CLR per accedere ai servizi di pluralizzazione, ma sicuramente sembra una cosa fattibile!
+1 - bello, non lo sapevo. – JNK
È possibile utilizzare gli assembly di .NET 4.0 in CLR di SQL Server? –
@MartinSmith - SQL CLR è attualmente (SQL 2008R2) limitato alla versione 3.5 del framework. Gli obiettivi di assemblaggio System.Data.EntityDesign 4.0 (vedere la mia risposta di seguito) – EBarr
La funzione non esiste in SQL Server, come menzionato @aF. L'unico posto in cui so se esiste è in Entity Framework 4+. L'oggetto di pluralizzazione può essere in realtà instantiated and used.
SQL ha la capacità di eseguire il codice CLR tramite SQL CLR. Il problema principale è che SQL CLR è limitato a .NET Framework 3.5. Quindi dovresti scrivere del codice .net 4 che funziona sui tuoi tavoli. In alternativa, è possibile utilizzare un prodotto come Reflector e eseguire il reverse engineering di una versione compatibile 3.5 e eseguirla all'interno di SQL Server.
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)
Returns
noun
------ ------------------------------
cat cats
mouse mice
goose geese
person persons
man men
datum data
Purtroppo appena si basa sull'osservazione che il termine TOP 1
espansione per il sostantivo è la forma plurale. Dubito che questo sia documentato ovunque.
Si desidera utilizzare questo per scopi di visualizzazione?
Qualcosa come "La ricerca ha prodotto 1 risultato"/"La ricerca ha prodotto 4 risultati "?
Se sì, non lo farei così.
Trovare o scrivere una funzione che funzioni correttamente per tutti i casi speciali (figuriamoci in più lingue) è quasi impossibile, e memorizzare ogni testo necessario una volta in singolare e una volta al plurale non è molto meglio.
Al lavoro, ho a che fare con più lingue e un sacco di frasi generate dinamicamente come questo molto, e ho scoperto che evitare del tutto la distinzione delle forme singolari/plurali a tutti è la soluzione più semplice da gestire:
"Numero di risultati per questa ricerca: 1"
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
so che questo è un vecchio thread, ma ho pensato di postare in ogni modo. Sulla base di ciò che Martin ha iniziato, l'ho ampliato e finora sta facendo un buon lavoro. Non direi che è perfetto. Questo è usato per pluralizzare i nomi delle tabelle quindi è molto controllato
- 1. parole plurale inglese come LINQ to SQL Does
- 2. Django plurale per i modelli
- 3. Traduzione di Django del plurale plurale quando la forma plurale è uguale alla forma singolare
- 4. Uso del plurale per la localizzazione russa
- 5. Enum Naming Convention - Plurale
- 6. Django fix Admin plurale
- 7. Convertire le parole tra le forme verbale/sostantivo/aggettivo
- 8. Nomi tabella database: Plurale o Singolare
- 9. Come rendere questa istruzione SQL
- 10. Estrazione nome + sostantivo o (nome | nome +) dal testo
- 11. Baffi JS e singolare/plurale
- 12. Tradurre il plurale in forma
- 13. String.IsNullOrEmpty come funzione per VARCHAR in SQL?
- 14. Funzione SQL personalizzata per il dialetto NHibernate
- 15. C'è un modo per rendere atomica una funzione in C? .
- 16. Come rendere veramente asincrone due query SQL
- 17. plurale per l'associazione has_many fields_for non mostrando in vista
- 18. Mix REST API plurale e singolare per risorse diverse?
- 19. Parametro funzione PL/SQL
- 20. SQL Countif funzione
- 21. Come rendere il valore di invio di un attributo tramite la funzione SQL
- 22. Come rendere sicura la funzione async-signal?
- 23. rendere la funzione con 'se' point-free
- 24. Come rendere la funzione concatenabile in JavaScript?
- 25. come rendere questa funzione ricorsiva sincrona asincrona
- 26. Il plurale intelligente è sempre intelligente?
- 27. Django admin cambia nome plurale nome
- 28. Scrittura di termini al plurale senza ridondanza
- 29. Fluent NHibernate Automapping non creare plurale nome della tabella
- 30. Tabelle di database denominazione, plurale o singolare
Ciò sarebbe difficile (in inglese, comunque) a causa dell'irregolarità dei pluralites. Gatto-> Gatti, Topo-> Topi, Oca-> Oche, Persona-> Persone ... –
In che lingua? :) Certo, lo standard non esiste. –
Esiste una funzione SQL che comprende la grammatica per una determinata lingua ??? No :) – MatBailie