作为上述答案的替代方案。如果您只想忽略( 和) 之间的内容,您可以使用InitCap 函数的略微修改版本
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)
IF @Char = '('
BEGIN
WHILE @Index <= LEN(@InputString)
AND @Char NOT IN (')')
BEGIN
SET @Index = @Index + 1
SET @PrevChar = @Char
SET @Char = SUBSTRING(@InputString,@Index,1)
SET @OutputString = STUFF(@OutputString,@Index,1,@Char)
END
END
IF @PrevChar IN (' ',';',':','!','?',',','.','_','-','/','&','''')
BEGIN
IF @PrevChar != ''''
OR UPPER(@Char) != 'S'
SET @OutputString = STUFF(@OutputString,@Index,1,UPPER(@Char))
END
SET @Index = @Index + 1
SET @PrevChar = @Char
END
RETURN @OutputString
END
GO
示例
SELECT [dbo].[InitCap](n)
FROM ( VALUES ( 'VENDOR CORPORATION (GA/ATL)'),
( 'VENDOR CORPORATION (ga/atl)'),
( 'VENDOR CORPORATION (Ga/Atl)') ) t (n)
output
--------
Vendor Corporation (GA/ATL)
Vendor Corporation (ga/atl)
Vendor Corporation (Ga/Atl)
如果您总是想在 ( 和 ) 中使用大写字母,只需在这两个地方使用 SET @OutputString = STUFF(@OutputString,@Index,1,UPPER(@Char))