mysql - sql中的字母大小写转换

标签 mysql sql tsql

我一直在尝试在 SQL 中创建一个函数,如果我提供输入“This is a 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

最佳答案

一些注意事项。首先,正如它在注释中指出的那样,SUBSTRING 函数中的第三个参数应为 1。这同样适用于 STUFF 函数。

另一点是!=运算符(operator)。尽管 SQL Server 默默接受它,但它并不是标准的 SQL 运算符。使用 <>

请为 @OutputString 使用相同的尺寸

最后,SQL Server 默认进行不区分大小写的字符串比较。你可以用排序规则修复它,但我发现与 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,'')

关于mysql - sql中的字母大小写转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35594250/

相关文章:

python - 检查用户输入的用户名和密码在MYSQL数据库中是否存在

mysql - SQL LIMIT 语法错误

python - Django MySQL 按时区分组

sql - 如何在 DateTime DATEADD 函数中添加 float (十进制)小时?

sql - 如何跨表找到多行的完美匹配?

sql - 检查时间范围重叠,watchman 问题 [SQL]

mysql - Mac 修改mysql密码失败

sql - 通配符 '%' ,在 ColdFusion cfscript 查询 LIKE 语句中?

mysql - SQL 更新语法错误

具有复杂条件的 SQL 子查询