将每个单词的首字母大写,而不更改当前的大写字母

时间:2017-07-11 08:07:43

标签: sql-server

我需要将每个单词的第一个字母大写,但保留在提交给SQL Server的文本框中可能已存在的任何大写字母。我目前有一个我调用的SQL函数,但是大写第一个字母并将每个单词的其余部分缩小。 例如,我需要的是,

约翰史密斯 - 约翰史密斯 ABC有限公司 - ABC Limited

下面是我目前的SQL函数。

 ALTER FUNCTION [dbo].[CAP_FIRST] ( @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

1 个答案:

答案 0 :(得分:0)

以下行似乎负责小写整个输入字符串:

SET @OutputString = LOWER(@InputString)

然后,该函数选择性地将它认为是每个单词的开头的大写字母。用以下赋值替换上面的行,并保留输入字符串的原始大小写:

SET @OutputString = @InputString