【问题标题】:alphabet case conversion in sqlsql中的字母大小写转换
【发布时间】:2023-04-11 03:58:02
【问题描述】:

我一直在尝试在 SQL 中创建一个函数,如果我提供输入“这是一只猫”,它应该转换字母大小写并给出一个输出“这是一只猫”

以下是我编写的函数,但它似乎不起作用。它看起来像声明 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(@OutputString,@Index,0) 将导致问题,因为您将要检索的字符数指定为零。将其更改为SUBSTRING(@OutputString,@Index,1)
  • 你为什么用 [mysql] 标签来标记它?

标签: mysql sql tsql


【解决方案1】:

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

另一点是!= 运算符。尽管 SQL Server 默默地接受它,但它不是标准的 SQL 运算符。使用&lt;&gt;

@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,'')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-04
    • 1970-01-01
    • 2015-07-28
    • 1970-01-01
    • 1970-01-01
    • 2015-08-07
    • 2013-07-26
    • 2017-08-24
    相关资源
    最近更新 更多