t SQL case表达式与where条件



我如何安排sql的大小写表达式在正确的格式,因为我得到错误。我试图使一个条件,如果字段的离开日期不是空显示左,否则显示活动

SELECT DISTINCT  
PEO.PEOPLE_ID AS [PEOPLE_ID]  
,PEO.EMPLOYEECLOCKNO AS [EMPLOYEENUMBER]  
,ISNULL(CONVERT(VARCHAR(50),PEO.DATEOFJOIN,103),'') AS [DATEOFJOIN]  
--,ISNULL(PEO.DISPLAYSTATUS,'') AS [DISPLAYSTATUS]
,CASE 
When ISNULL(PEO.STATUS,'' ) = 'A' 
Then 'ACTIVE'
ELSE 'LEFT' WHERE PEO.DATEOFLEAVING <> NULL
END as [STATUS]

INTO #BSP_EMPLOYEEDETAILS 

谢谢你的帮助。

我试图使一个条件,如果字段的离开日期不是空显示左,否则显示活动

CASE WHEN PEO.DATEOFLEAVING IS NULL THEN 'ACTIVE' ELSE 'LEFT' END

(我更喜欢让布尔检查积极的感觉而不是消极的感觉,但如果你想要它是消极的…)

CASE WHEN PEO.DATEOFLEAVING IS NOT NULL THEN 'LEFT' ELSE 'ACTIVE' END

注意蜜獾的评论;您应该只使用IS NULLIS NOT NULL来比较null - null右操作数与任何非is操作符的结果为null:

NULL IS NULL     --true
NULL IS NOT NULL --false
NULL = NULL      --null, which eventually will (probably) be processed as false
NULL <> NULL     --null, which eventually will (probably) be processed as false
NULL != NULL     --null, which eventually will (probably) be processed as false
NOT(NULL = NULL) --null, which eventually will (probably) be processed as false

我说"最终"因为这很重要;零差价。如果你看最后一个例子,NULL=NULLNULL,然后变成NOT(NULL),也是NULL。如果NULL=NULL瞬间变成了FALSE,那么NOT(NULL=NULL)就变成了NOT(FALSE),也就是TRUE。事实上,null在整个操作集合中扩散,在末尾弹出,然后被解释为false,这可能是有利的,但始终应该注意…

当然,如果接收它的东西是用于处理NULL,如COALESCE(NOT(NULL=NULL), 'it was null'),那么它将接收一个NULL(在这种情况下会输出'it was null'),但通常当你在布尔上下文(如CASE WHEN NOT(mycolumn=NULL) THEN...WHERE NOT(mycolumn=NULL))中使用它时,它会变成NULL,并按情况接收/在哪里并解释为false

可能值得指出的是,SQLServer在这种情况下不支持布尔值,所以你不能使用这样的合并,甚至NOT(NULL=NULL)的例子,但如果你想尝试一下你的知识,MySQL更宽容,它允许这样的查询:
select case when (NOT(x = NULL)) IS NULL THEN 't' ELSE 'f' end
from (select null as x)y
select case when (NOT(x = NULL)) IS UNKNOWN THEN 't' ELSE 'f' end
from (select null as x)y

SQLServer希望您更快地做出null决定,并且不允许您在它可以看到已变为null/unknown的东西上胡闹

关于UNKNOWN的脚注;它通常被(甚至在规范中)视为布尔NULL的同义词——在真值表的意义上,它被称为三态布尔逻辑中的第三个值,但如果数据库支持将UNKNOWN作为关键字,则通常可以互换使用。就我个人而言,我喜欢少记一件事;你可以学习NULL的行为,并通过应用这些简单的规则来实现逻辑上一致的结果:IS NULL, IS NOT NULL,其他任何东西都变成NULL,然后使它接触到的所有东西都为空

相关内容

  • 没有找到相关文章

最新更新