我已经编写了查询,但它正在运行:
declare @word as nvarchar (20)
set @word = 'victOR aALEXander'
select upper(left(@word, 1)) + lower(SUBSTRING(@word,2,charindex(' ', @word)-2)) + ' ' +
upper(left(substring(@word,charindex(' ', @word)+1,len(@word)-1),1))
+ lower(SUBSTRING(@word,charindex(' ', @word)+2, len(@word)))
我创建了这个函数:
alter function letters ( @word as nvarchar(20))
returns varchar(20) as begin
return upper(left(@word, 1)) + lower(SUBSTRING(@word,2,charindex(' ', @word)-2)) + ' ' +
upper(left(substring(@word,charindex(' ', @word)+1,len(@word)-1),1))
+ lower(SUBSTRING(@word,charindex(' ', @word)+2, len(@word))) end
最后我做了:
select dbo.letters(users)
from dbo.tempdb
我有:
传递给SUBSTRING函数的长度参数无效
为什么?
答案 0 :(得分:0)
@word
参数的字符数小于子字符串数。此外,参数可以是null
。
答案 1 :(得分:0)
如果您在开头和结尾都有空格,也可以尝试修剪:
alter function letters ( @word as nvarchar(20))
returns varchar(20) as
begin
set @word = ltrim(rtrim(@word))
return upper(left(@word, 1)) + lower(SUBSTRING(@word,2,charindex(' ', @word)-2)) + ' ' +
upper(left(substring(@word,charindex(' ', @word)+1,len(@word)-1),1))
+ lower(SUBSTRING(@word,charindex(' ', @word)+2, len(@word)))
end
答案 2 :(得分:0)
尝试此查询是否有效。但是,如果您有多个'',则此查询将失败。
declare @word as nvarchar (20)
set @word = 'alex' -- 'victOR aALEXander'
select
upper(left(@word, 1)) +
CASE WHEN charindex(' ', @word)>0 THEN lower(SUBSTRING(@word,2,charindex(' ', @word)-2)) + ' '
+ upper(left(substring(@word,charindex(' ', @word)+1,len(@word)-1),1))
+ lower(SUBSTRING(@word,charindex(' ', @word)+2, len(@word)))
ELSE lower(SUBSTRING(@word,2,len(@word)-1)) END
答案 3 :(得分:0)
尝试此功能:
Create Function dbo.Proper(@Data VarChar(8000))
Returns VarChar(8000)
As
Begin
Declare @Position Int
Select @Data = Stuff(Lower(@Data), 1, 1, Upper(Left(@Data, 1))),
@Position = PatIndex('%[^a-zA-Z][a-z]%', @Data COLLATE Latin1_General_Bin)
While @Position > 0
Select @Data = Stuff(@Data, @Position, 2, Upper(SubString(@Data, @Position, 2))),
@Position = PatIndex('%[^a-zA-Z][a-z]%', @Data COLLATE Latin1_General_Bin)
Return @Data
End
无论数据中是否有空格,撇号或其他任何内容,此函数都能正常工作。不幸的是,它不会将麦当劳转换为麦克唐纳或奥布莱恩转为奥布莱恩。但是,它适用于任何只有1个大写字母的单词。