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