我有字符串,我需要将它们转换为所需字符串中的Capital文本
我已经使用Charindex编写了查询,它只找到一个如何去找第二个我只是通过索引找到第二个单词如何找到其他单词
select UPPER(LEFT(SUBSTRING('AHRQ utilization flag',CHARINDEX(' ','AHRQ utilization flag',0)+1,
len('AHRQ utilization flag')),1))
例如,Sample input:
have a great day
我想要的输出:
Have A Great Day
如何做到这一点......建议我
答案 0 :(得分:1)
您可以编写一个函数来转换驼峰大小写中所需的字符串,如下所示:
CREATE FUNCTION [dbo].[fn_CamelCase]
(@Str varchar(8000))
RETURNS varchar(8000) AS
BEGIN
DECLARE @Result varchar(8000)
SET @Str = LOWER(@Str) + ' '
SET @Result = ''
WHILE 1=1
BEGIN
IF PATINDEX('% %',@Str) = 0 BREAK
SET @Result = @Result + UPPER(Left(@Str,1))+
SubString (@Str,2,CharIndex(' ',@Str)-1)
SET @Str = SubString(@Str,
CharIndex(' ',@Str)+1,Len(@Str))
END
SET @Result = Left(@Result,Len(@Result))
RETURN @Result
END
Go
然后调用:
select 'AHRQ ' + dbo.fn_CamelCase ('utilization flag')
带有MS SQL Server的
答案 1 :(得分:0)
CREATE FUNCTION udf_vijay (@InputString VARCHAR(1000) )
RETURNS VARCHAR(1000)
AS
BEGIN
DECLARE @Index INT
DECLARE @Char CHAR(1)
DECLARE @OutputString VARCHAR(255)
SET @OutputString = LOWER(@InputString)
SET @Index = 2
SET @OutputString =
STUFF(@OutputString, 1, 1,UPPER(SUBSTRING(@InputString,1,1)))
WHILE @Index <= LEN(@InputString)
BEGIN
SET @Char = SUBSTRING(@InputString, @Index, 1)
IF @Char IN (' ', ';', ':', '!')
IF @Index + 1 <= LEN(@InputString)
BEGIN
IF @Char != ''''
OR
UPPER(SUBSTRING(@InputString, @Index + 1, 1)) != 'S'
SET @OutputString =
STUFF(@OutputString, @Index + 1, 1,UPPER(SUBSTRING(@InputString, @Index + 1, 1)))
END
SET @Index = @Index + 1
END
RETURN ISNULL(@OutputString,'')
END
答案 2 :(得分:0)
一种方法可能是:
将字符串拆分为第一个字符UPPER,其余字符串如下:
UPPER(LEFT(string)) + RIGHT(string, LEN(string) - 1)
然后用大写字母替换任何空格后跟一个字母,例如:
REPLACE(string, ' a', ' A')
结合上述内容,您可以这样做:
SELECT
UPPER(LEFT('have a great day')) +
REPLACE((((((((((((((((((((((((((
RIGHT('have a great day', LEN('have a great day') - 1)
, ' a', ' A'), ' b', ' B'), ' c', ' C')
, ' d', ' D'), ' e', ' E'), ' f', ' F')
, ' g', ' G'), ' h', ' H'), ' i', ' I')
, ' j', ' J'), ' k', ' K'), ' l', ' L')
, ' m', ' M'), ' n', ' N'), ' o', ' O')
, ' p', ' P'), ' q', ' Q'), ' r', ' R')
, ' s', ' S'), ' t', ' T'), ' u', ' U')
, ' v', ' V'), ' w', ' W'), ' x', ' X')
, ' y', ' Y'), ' z', ' Z')
可能需要一些调整,因为我还没有真正测试过它
答案 3 :(得分:0)
create function f_CamelCase
(
@txt nvarchar(max)
) returns nvarchar(max)
as
begin
set @txt = stuff(lower(@txt), 1,1,upper(left(@txt, 1)))
declare @index int = 1
while @index > 0
begin
set @index = patindex('%[ ][abcdefghijklmnopqrstuvxyz]%', @txt
COLLATE SQL_Latin1_General_CP1_CS_AS)
select @txt = stuff(@txt, @index+ 1, 1, upper(substring(@txt, @index + 1, 1)))
where @index > 0
end
return @txt
end
测试:
select dbo.f_CamelCase('aa b A b c')
结果:
Aa B A B C