gpt4 book ai didi

SQL 大小写函数查询细化

转载 作者:行者123 更新时间:2023-12-04 23:50:37 26 4
gpt4 key购买 nike

我有一个名称表,我试图将其从大写转换为正确的大小写。下面的代码几乎完全符合我的要求。当我测试它时,我注意到有些人的名字中有罗马数字,表中有 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] [M][c][*]' THEN 1 --Convert MCDONALD to McDonald
WHEN SUBSTRING(@Text,@I-4,5) like '_[a-z] [O][''][*]' THEN 1 --Convert O'DONNEL to O'Donnel
ELSE 0
END = 1
THEN 1
ELSE CASE WHEN @c like '[a-zA-Z]' or @c in ('''') THEN 0
ELSE 1
END
END,
@i = @i +1
RETURN @Ret
end

最佳答案

我会以不同的方式做:

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)
DECLARE @Text1 varchar(81)

SELECT @Reset = 1, @i=1, @Ret = '', @Text1 = ' ' + @Text

WHILE @i <= LEN(@Text1)
SELECT @c= SUBSTRING(@Text1,@i,1),
@Ret = @Ret + CASE WHEN @Reset=1 THEN UPPER(@c) ELSE LOWER(@c) END,
@Reset= CASE WHEN
CASE WHEN SUBSTRING(@Text1,@i-2,3) like ' [DdOoLl]''' THEN 1
WHEN SUBSTRING(@Text1,@i-2,4) like ' [Mm][cC][a-zA-Z]' THEN 1
WHEN SUBSTRING(@Text1,@i-3,5) like ' [Mm][Aa][cC][a-zA-Z]' THEN 1
ELSE 0
END = 1
THEN 1
ELSE CASE WHEN @c like '[a-zA-Z]' or @c in ('''') THEN 0
ELSE 1
END
END,
@i = @i +1
RETURN stuff(@Ret, 1, 1, '')
end

此功能支持 O'、L'、D',以及 Mc 和 Mac。该函数还可以从任何大小写(不仅是大写)转换为正确的大小写

SQL Fiddle
select dbo.f_ProperCase('CORMACK')
,dbo.f_ProperCase('Mcdonald ronald')
,dbo.f_ProperCase('o''hara')

| | | |
|---------|-----------------|--------|
| Cormack | McDonald Ronald | O'Hara |

关于SQL 大小写函数查询细化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22923616/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com