转换字符串,因此SQL中的每个字母都是大写的

时间:2016-09-28 15:58:03

标签: sql string case

使用SQL我希望更新已存在于表中的数据。

数据列设置为字符串

示例:

“你好。我正在使用stackoverflow。”

我希望将其更改为

“你好。我正在使用stackoverflow。”

这里的愿望是每个句子的第一个字母是大写的,所以不是严格的句子案例?

我已经尝试了一些东西,但到目前为止只获得了第一个字符串?

我的猜测是我需要找到一个子字符串字符。并在此之后使用2个字符的子串来大写,我不确定这是否可以用SQL。

2 个答案:

答案 0 :(得分:0)

尝试使用此功能

ALTER FUNCTION [dbo].[InitialCap](@String VARCHAR(8000))
                  RETURNS VARCHAR(8000)
                 AS
 BEGIN 

                   DECLARE @Position INT;

SELECT @String   = STUFF(LOWER(@String),1,1,UPPER(LEFT(@String,1))) COLLATE Latin1_General_Bin,
                    @Position = PATINDEX('%[^A-Za-z''][a-z]%',@String COLLATE Latin1_General_Bin);

                    WHILE @Position > 0
                    SELECT @String   = STUFF(@String,@Position,2,UPPER(SUBSTRING(@String,@Position,2))) COLLATE Latin1_General_Bin,
                    @Position = PATINDEX('%[^A-Za-z''][a-z]%',@String COLLATE Latin1_General_Bin);

                     RETURN @String;
  END ;

答案 1 :(得分:0)

试试这个

declare @str varchar(max)  = 'i am. i am. this is a string';

declare @ld int = 1, @i int = 1
declare @c varchar(1)
declare @str2 varchar(max) = ''

while @i <= len(@str)
begin

    select  @c = substring (@str, @i, 1)

    if @ld = 1 and @c != ' '
    begin
        select  @ld = 0
        select  @c = upper(@c)
    end

    select  @str2 = @str2 + @c
    if @c = '.'
        select @ld = 1

    select  @i = @i + 1
end

select  @str2
相关问题