Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 在Case语句中,我可以告诉它我想查看值是“Y”还是NULL吗?_Mysql_Sql - Fatal编程技术网

Mysql 在Case语句中,我可以告诉它我想查看值是“Y”还是NULL吗?

Mysql 在Case语句中,我可以告诉它我想查看值是“Y”还是NULL吗?,mysql,sql,Mysql,Sql,我正试图对我掌握的一些参数进行多级反馈。我没有得到我想要的空值。我想知道我如何做一个多部分ELSE语句,在这里我可以说ELSE send'N'或NULL。这是我的代码的一个缩写示例。我知道它在没有或部分的情况下工作,但是没有或我不会得到NULL值。我知道它凌乱的数据和业务应该总是填充Y或N,但我们都知道情况并非如此 DECLARE @par1 char(1) DECLARE @par2 char(1) DECLARE @par3 char(1) DECLARE @needs char(1)

我正试图对我掌握的一些参数进行多级反馈。我没有得到我想要的空值。我想知道我如何做一个多部分ELSE语句,在这里我可以说ELSE send'N'或NULL。这是我的代码的一个缩写示例。我知道它在没有或部分的情况下工作,但是没有或我不会得到NULL值。我知道它凌乱的数据和业务应该总是填充Y或N,但我们都知道情况并非如此

DECLARE @par1 char(1)
DECLARE @par2 char(1)
DECLARE @par3 char(1) 
DECLARE @needs char(1)

SET @needs = 'C'
SET @par1 = CASE @needs WHEN 'C' THEN 'Y' ELSE @par1 = 'N' or @par1 IS NULL END
SET @par2 = CASE @needs WHEN 'S' THEN 'Y' ELSE @par2 = 'N' or @par2 IS NULL END
SET @par1 = CASE @needs WHEN 'L' THEN 'Y' ELSE @par3 = 'N' or @par3 IS NULL END
你可以用 案例COALESCE@needs,空。。。 要将@needs值强制转换为nun null值,即“null”字符串,请执行以下操作:

SET @par1 = CASE COALESCE(@needs, 'NULL') WHEN 'C' THEN 'Y' WHEN 'NULL' THEN NULL ELSE 'N' END
或者,您可以使用CASE语句中更标准的SQL方法:

SET @par1 = CASE 
    WHEN @needs IS NULL THEN NULL
    WHEN @needs='C' THEN 'Y' 
    ELSE 'N' 
END

此代码应执行您想要的操作:

SET @par1 = (CASE @needs WHEN 'C' THEN 'Y' ELSE 'N' END)
当@needs为NULL时,这将把值设置为“N”

如果还希望返回空值,则应使用多部分案例:


CASE是一个标量表达式。它返回一个值。虽然您可以在MySQL中设置变量,但您的逻辑不需要这样做。

这三个CASE表达式背后的逻辑是什么?如果您的CASE语句不正确,只需将ELSE设置为NULL,它将返回NULL。为什么要发送'N'或NULL?为什么不只是“N”?还是空?好问题。数据是新的,“N”的某些值也是空的。我想假设'N'为空。这意味着我不希望我的CASE语句排除null。按照我的方式,它只会在其他两个变量为N的情况下提取数据行。我想说,如果你告诉我你想要Y的Par1,给我par2和par3,如果它们是'N'或Null。你不需要单独检查Null,你可以将Null放入ELSE条件。我想他想给'N'和Null赋予一个特殊的含义,不适用于“Q”例如。。。从这个问题很难判断真正的意图是什么。我同意非常困难的部分:-例如,他在第三行案例中确实有@needs,而'L'-所以@needs至少可以有'C'和'L'值,我想。。。而且可能是空的。。。所以,也许他可以做一些东西,或者合并,然后他可以用它作为一个WHEN选项,或者3路分支:我想我找到了,检查更新的答案。。。如果我是对的,我会感到惊讶:
SET @par1 = (CASE WHEN @needs = 'C' THEN 'Y'
                  WHEN @needs IS NOT NULL THEN 'N'
             END)  --`NULL` is the default.