CASE语句加模数(%)

use*_*071 3 sql sql-server sql-server-2008

目的:简单的程序; 当我的变量被分成3时,它返回单词'the',当它被分成5时它返回'hop',当它被分成3和5同时它返回两个单词.

DECLARE @Zmienna AS INT
SET @Zmienna = 0

WHILE @Zmienna < 999
BEGIN
    PRINT @Zmienna +
        CASE
            WHEN @Zmienna/3=% THEN ' hip'
            WHEN @Zmienna/5=% THEN ' hop'
        END 
    SET @Zmienna = @Zmienna + 1
END
Run Code Online (Sandbox Code Playgroud)

错误

ERROR: Msg 156, Level 15, State 1, Line 8
Incorrect syntax near the keyword 'THEN'.
Msg 102, Level 15, State 1, Line 12
Incorrect syntax near 'END'.
Run Code Online (Sandbox Code Playgroud)

任何的想法?

Pat*_*man 7

我会使用模数的其余部分(就像你尝试过的那样)并连接两个case语句(hiphop如果两个条件都为真,你将永远不会得到).你也需要,else ''否则你可以获得null价值:

CASE
WHEN @Zmienna % 3 = 0
THEN ' hip'
ELSE ''
END
+
CASE
WHEN @Zmienna % 5 = 0
THEN ' hop'
ELSE ''
END 
Run Code Online (Sandbox Code Playgroud)

提示:如果两个条件都需要空格或其他文本,则true必须and在case语句中使用a :

CASE
WHEN @Zmienna % 3 = 0 and @Zmienna % 5 = 0
THEN ' hip hop'
WHEN @Zmienna % 3 = 0
THEN ' hip'
WHEN @Zmienna % 5 = 0
THEN ' hop'
END 
Run Code Online (Sandbox Code Playgroud)

  • 谷歌搜索`@ ZMienna`,`modulo`让我怀疑这是波兰大学的作业.我们通过回答使OP没有好处,但是多个`CASE`和`ELSE`检查会失败,因为练习的目的是证明操作符和`WHEN`语句的理解.如果OP发布***'*需要迭代的*附加*解决方案,例如使用数字表,解释为什么它优于迭代,我会给予额外的分数 (2认同)