SQL Server中是否有任何函数将名词从单数形式更改为复数形式?
答案 0 :(得分:4)
SQL Server中不存在该功能。
答案 1 :(得分:4)
SQL本身没有这样的东西 - 但您可以尝试使用.NET 4中引入的.NET PluralizationService - 与实体框架用于将表名复数/单一化为对象名的相同功能
你必须编写一个SQL-CLR程序集来进入多元化服务,但它绝对是一件可行的事情!
答案 2 :(得分:2)
该函数在SQL Server中不存在,如@aF所述。我所知道的一个地方是否存在于Entity Framework 4+中。复数对象实际上可以是instantiated and used。
SQL具有运行CLR代码的能力 - 通过SQL CLR。主要问题是SQL CLR仅限于.NET Framework 3.5。因此,您需要编写一些在您的表上运行的.net 4代码。或者,您可以使用像Reflector这样的产品并对3.5兼容版本进行反向工程,并在SQL Server中运行它。
答案 3 :(得分: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
扩展术语是复数形式。我怀疑这在任何地方都有记录。
答案 4 :(得分: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
我知道这是一个老线程,但我想我会发帖。基于马丁的起点,我对它进行了扩展,到目前为止,它的工作做得很好。我不会说这是完美的。这用于多个表名,因此它是非常受控制的
答案 5 :(得分:1)
您是否想将其用于显示目的?
类似" 您的搜索返回1 结果 " /" 您的搜索返回4 结果 " ?
如果是,我不会那样做。
找到或编写一个能够针对所有特殊情况正确执行此操作的函数(更不用说多种语言)几乎是不可能的,并且将每个所需文本以单数形式存储一次,而以复数形式存储一次并不是更好。
在工作中,我处理多种语言和许多动态生成的句子很多,我发现完全避免区分单数/复数形式是最容易管理的解决方案:
" 此次搜索的结果数量:1 "
答案 6 :(得分: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
,如果是,则查找复数。