首字母 - 每个单词大写,业务类型除外



我有一个UDF,它将使列中每个作品的第一个字母大写。我的问题是我想为此添加一些例外,但我无法弄清楚如何做到这一点。

在我的数据库中,我有一列企业名称 - 例如 - 迈克斯咖啡店有限责任公司。

我现在的函数将返回 - 迈克斯咖啡店,Llc。 我希望 LLC 大写,而公司名称的其余部分是正确的。 关于如何修改此功能以使 LLC 或 INC 之类的东西全部大写的任何想法?

CREATE FUNCTION [dbo].[InitCap] ( @InputString varchar(4000) ) 
RETURNS VARCHAR(4000)
AS
BEGIN
DECLARE @Index          INT
DECLARE @Char           CHAR(1)
DECLARE @PrevChar       CHAR(1)
DECLARE @OutputString   VARCHAR(255)
SET @OutputString = LOWER(@InputString)
SET @Index = 1
WHILE @Index <= LEN(@InputString)
BEGIN
SET @Char     = SUBSTRING(@InputString, @Index, 1)
SET @PrevChar = CASE WHEN @Index = 1 THEN ' '
ELSE SUBSTRING(@InputString, @Index - 1, 1)
END
IF @PrevChar IN (' ', ';', ':', '!', '?', ',', '.', '_', '-', '/', '&', '''', 
'(')
BEGIN
IF @PrevChar != '''' OR UPPER(@Char) != 'S'
SET @OutputString = STUFF(@OutputString, @Index, 1, UPPER(@Char))
END
SET @Index = @Index + 1
END
RETURN @OutputString
END
GO

如果有兴趣,这里有一个函数,如果需要,可以扩展。

Declare @YourTable table (SomeCol varchar(100))
Insert Into @YourTable values
('old mcdonald'),
('dr. Langdon ,dds'),
('b&o railroad'),
('john-m-smith'),
('CARSON/jACOBS'),
('jAmes o''neil')
Select *
,ProperCase = [dbo].[svf-Str-Proper](SomeCol)
From @YourTable

返回

SomeCol             ProperCase
old mcdonald        Old McDonald
dr. Langdon ,dds    Dr. Langdon ,DDS
b&o railroad        B&O Railroad
john-m-smith        John-M-Smith
CARSON/jACOBS       Carson/Jacobs
jAmes o'neil        James O'Neil

UDF 如果有兴趣

CREATE FUNCTION [dbo].[svf-Str-Proper] (@S varchar(50))
Returns varchar(max)
As
Begin
Set @S = ' '+Replace(Replace(Lower(@S),'   ',' '),'  ',' ')+' '
;with cte1 as (Select * From (Values(' '),('-'),('/'),(''),('['),('{'),('('),('.'),(','),('&'),(' Mc'),(' O''')) A(P))
,cte2 as (Select * From (Values('A'),('B'),('C'),('D'),('E'),('F'),('G'),('H'),('I'),('J'),('K'),('L'),('M')
,('N'),('O'),('P'),('Q'),('R'),('S'),('T'),('U'),('V'),('W'),('X'),('Y'),('Z')
,('LLC'),('PhD'),('MD'),('DDS')
) A(S))
,cte3 as (Select F = Lower(A.P+B.S),T = A.P+B.S From cte1 A Cross Join cte2 B ) 
Select @S = replace(@S,F,T) From cte3
Return rtrim(ltrim(@S))
End
-- Syntax :  Select [dbo].[svf-Str-Proper]('old mcdonald phd,dds llc b&o railroad')

一种方法是处理REPLACE异常:

...
SET @OutputString = REPLACE(@outputString, 'Llc.', 'LLC.');
SET @OutputString = REPLACE(@OutputString, '...', '...');
RETURN @OutputString;

最好以分号结尾每个语句。

最新更新