将大写的数据库转换为适当的大小写

问题描述

| 我是sql的新手,我有几个大型数据库,它们的大写名字和姓氏需要在sql Server 2008中转换为正确的大小写。 我正在使用以下方法来做到这一点:
update database 
Set FirstNames = upper(substring(FirstNames,1,1))
                     + lower(substring(FirstNames,2,(len(FirstNames) - 1) ))
我想知道是否有任何方法可以适应这种情况,以便同时更新具有两个名字的字段(当前,我进行了更改,然后手动更改了第二个名字)。 我查看了该字段中的其他答案,与上面的查询相比,它们似乎都退出了很长时间。 还有什么方法可以帮助转换Mc suranmes(我将手动更改其他)?麦克唐纳(McDonald)的麦克唐纳德(MCDONALD),我再次使用about查询,但用姓氏替换了名字。     

解决方法

        这可能最好在SQL之外完成。但是,如果需要在服务器上执行此操作,或者如果速度不是问题(因为这将成为问题,那么您需要弄清楚自己是否在意),那么解决方法可能就是最好的方法。如果需要,可以创建将所有逻辑放在一个区域中的UDF。 这是我遇到的一些代码(下面有署名和更多信息):
CREATE FUNCTION dbo.fCapFirst(@input NVARCHAR(4000)) RETURNS NVARCHAR(4000)
AS 
BEGIN
DECLARE @position INT
WHILE IsNull(@position,Len(@input)) > 1
SELECT @input = Stuff(@input,IsNull(@position,1),1,upper(substring(@input,1))),@position = charindex(\' \',@input,1)) + 1
RETURN (@input)
END

--Call it like so
select dbo.fCapFirst(Lower(Column)) From MyTable
我从http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=37760获得了此代码。该论坛中也提供了更多信息和其他建议。 至于处理像麦当劳这样的案件,我建议采用两种方式之一来处理。一种是在上面的UDF中搜索键名(\'McDonald \',\'McGrew \'等)或模式(前两个字母是Mc,然后下一个大写字母,等等)。第二种方法是将这些案例(全名)放在表中,并将其替换值放在第二列中。然后只需进行替换即可。但是,最有可能的是,最简单的方法是先确定像Mc这样的规则,然后大写,而不是尝试列出每个姓氏的可能性。 别忘了,您可能希望修改上面的UDF以包括破折号,而不仅仅是空格。     ,        也许这太长了,但它很简单,可以适应
-
\'
等:
UPDATE tbl SET LastName = Case when (CharIndex(\' \',lastname,1)<>0) then (Upper(Substring(lastname,1))+Lower(Substring(lastname,2,CharIndex(\' \',1)-1)))+ 
 (Upper(Substring(lastname,1)+1,1))+
 Lower(Substring(lastname,1)+2,Len(lastname)-(CharIndex(\' \',1)-1)))) 
  else (Upper(Substring(lastname,Len(lastname)-1))) end,FirstName = Case when (CharIndex(\' \',firstname,1)<>0) then (Upper(Substring(firstname,1))+Lower(Substring(firstname,1)-1)))+ 
 (Upper(Substring(firstname,1))+
 Lower(Substring(firstname,Len(firstname)-(CharIndex(\' \',1)-1)))) 
  else (Upper(Substring(firstname,Len(firstname)-1))) end;
    ,        托尼·罗杰森(Tony Rogerson)的代码涉及: 双桶名称,例如Arthur Bentley-Smythe 控制字符 我自己还没用过...