sql中的字母大小写转换

时间:2016-02-24 05:48:51

标签: mysql sql tsql

我一直在尝试在SQL中创建一个函数,如果我提供输入“这是一个CAt”,它应该转换字母表案例并给出输出“tHIS IS A caT”

以下是我编写的功能,但它似乎不起作用。看起来像是声明     SET @Char = SUBSTRING(@InputString,@Index,0) 并且似乎不能正常工作。

任何人都可以帮助解决这个问题。

CREATE FUNCTION changeCase (@InputString VARCHAR(4000) )
RETURNS VARCHAR(4000)
AS
BEGIN
DECLARE @Index INT
DECLARE @Char CHAR(1)
DECLARE @OutputString VARCHAR(255)
SET @OutputString = @InputString
SET @Index = 1
WHILE @Index <= LEN(@InputString)
BEGIN
SET @Char = SUBSTRING(@OutputString,@Index,0)
IF @Char != LOWER(@Char)
SET @OutputString = STUFF(@OutputString, @Index, 0,LOWER(@Char))
ELSE
SET @OutputString = STUFF(@OutputString, @Index, 0,UPPER(@Char))
SET @Index = @Index + 1
END
RETURN ISNULL(@OutputString,'')
END

1 个答案:

答案 0 :(得分:1)

一些笔记。首先,正如它在注释中指出的那样,SUBSTRING函数中的第三个参数应该是1.这同样适用于STUFF函数。

另一点是!=运算符。虽然SQL Server默默地接受它,但它不是标准的SQL运算符。使用<>

请为@OutputString

使用相同的尺寸

最后,SQL Server默认情况下使用不区分大小写的字符串进行比较。您可以使用collat​​es修复它,但我发现与ASCII的比较工作得很好。这是你的工作代码:

declare @InputString VARCHAR(4000) 
DECLARE @Index INT
DECLARE @Char CHAR(1)
DECLARE @OutputString VARCHAR(4000)
set @InputString = 'tHIS IS A caT'
SET @OutputString = @InputString
SET @Index = 1
WHILE @Index <= LEN(@InputString)
BEGIN
 SET @Char = SUBSTRING(@OutputString,@Index,1)
 IF ASCII(@Char) <> ASCII(LOWER(@Char))
  SET @OutputString = STUFF(@OutputString, @Index, 1,LOWER(@Char))
 ELSE
  SET @OutputString = STUFF(@OutputString, @Index, 1,UPPER(@Char))
 SET @Index = @Index + 1
END
print ISNULL(@OutputString,'')