CASE语句加模数(%)

时间:2014-11-24 07:59:54

标签: sql sql-server sql-server-2008

AIM:简单程序;当我的变量被分成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

错误

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'.

有什么想法吗?

5 个答案:

答案 0 :(得分:6)

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

CASE
WHEN @Zmienna % 3 = 0
THEN ' hip'
ELSE ''
END
+
CASE
WHEN @Zmienna % 5 = 0
THEN ' hop'
ELSE ''
END 

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

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 

答案 1 :(得分:2)

试试这个:

DECLARE @Zmienna AS INT
SET @Zmienna = 0

WHILE @Zmienna < 999
BEGIN
    PRINT CAST(@Zmienna as varchar) +
        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 
    SET @Zmienna = @Zmienna + 1
END

答案 2 :(得分:1)

试试这个,它只会给你一个数据集而不是999,以获得更好的性能和可读性。

Print只能处理1个值,而是可以选择1中的所有行并在不同的列中显示值而不是将它们连接起来:

;WITH CTE as
(
  SELECT 0 Zmienna
  UNION ALL
  SELECT Zmienna + 1
  FROM CTE
  WHERE Zmienna < 998 -- i wonder why you don't want to include 999
)
SELECT 
  Zmienna,
  CASE
    WHEN Zmienna % 15 = 0 THEN 'hiphop'
    WHEN Zmienna % 3 = 0 THEN 'hip'
    WHEN Zmienna % 5 = 0 THEN 'hop'
  END as Hippityhop
FROM CTE
OPTION (maxrecursion 0)

答案 3 :(得分:0)

您可以使用IF声明

来完成此操作
    DECLARE @Zmienna AS INT
SET @Zmienna = 0

WHILE @Zmienna < 999
BEGIN
    if (@Zmienna % 3) = 0 and (@Zmienna % 5) = 0
BEGIN
PRINT  convert(varchar(10),@Zmienna)+ ' hip'+' '+'hop' 
END
ELSE
BEGIN
if (@Zmienna % 3) = 0
BEGIN
PRINT  convert(varchar(10),@Zmienna)+' hip' 
END
if (@Zmienna % 5) = 0
BEGIN
select convert(varchar(10),@Zmienna)+' hop'
END
END
    SET @Zmienna = @Zmienna + 1
END

答案 4 :(得分:0)

这似乎是最简单的答案:

DECLARE @Zmienna AS INT SET @Zmienna = 0

WHILE @Zmienna&lt; 999 开始     PRINT CAST(@Zmienna as varchar)+         案件             什么时候(@ Zmienna%3 = 0和@ Zmienna%5 = 0)然后'嘻哈'             当@ Zmienna%3 = 0那么'时髦'             当@ Zmienna%5 = 0那么'跳'             ELSE''

    END 
SET @Zmienna = @Zmienna + 1

END