我有一个名称表,我试图从大写转换为正确的案例.以下代码几乎完全与我相同.当我测试它时,我注意到我的名字中有罗马数字的人,表中的Mc*和O'*.当然,查询将任意多个罗马数字转换为Iv,就像它应该的那样,并且任何MCDONALDS或O'DANIEL都被转换为Mcdonalds和O'daniel.我试图弄清楚如何对这个函数进行彻底的更改,以便我可以运行我的更新查询,但我仍然在非工作时间将我的SQL知识和平一致.任何帮助/建议将不胜感激.我做了一个谷歌搜索,发现了几个例子,但我尝试的那些没有用.我需要做的更正量相对较小(1000行表中的17次更正),但我想尝试整理它以尽可能多地限制人为错误.
预先感谢您的帮助.
CREATE FUNCTION [dbo].[f_ProperCase]
(@Text as varchar(80))
RETURNS varchar(80) as
BEGIN
DECLARE @Reset bit
DECLARE @Ret varchar(80)
DECLARE @i int
DECLARE @c char(1)
SELECT @Reset = 1, @i=1, @Ret = ''
WHILE @i <= LEN(@Text)
SELECT @c= SUBSTRING(@Text,@i,1),
@Ret = @Ret + CASE WHEN @Reset=1 THEN UPPER(@c) ELSE LOWER(@c) END,
@Reset= CASE WHEN
CASE WHEN SUBSTRING(@Text,@i-4,5) like '_[a-z] [DOL]''' THEN 1
WHEN SUBSTRING(@Text,@i-4,5) like '_[a-z] [D][I]' THEN 1
WHEN SUBSTRING(@Text,@i-4,5) like '_[a-z] [M][C]' THEN 1
WHEN SUBSTRING(@Text,@i-4,5) like '_[a-z] …Run Code Online (Sandbox Code Playgroud)