SQL查询Discharge Date/Discharge Reason为NULL无结果问题咨询
问题根因
查询无返回结果是因为对SQL空值逻辑的理解错误:
- SQL中的
NULL是独立的特殊值标记,不是存储在字段里的字符串内容。你原语句里写的[Discharge Reason] like '%Null%'只能匹配字段值里真的包含"Null"四个英文字符的记录,完全无法识别真实存储为空的NULL值。 - 你注释掉的CASE语句逻辑残缺,只定义了空值的返回分支,没有定义非空值的处理逻辑,直接放开注释也会导致非空的出院日期全部显示为NULL。
修正后可直接运行的查询脚本
/****** 适配SSMS(SQL Server)的修正查询脚本 ******/ SELECT [EOCKey] ,[FacilityOrgKey] ,[Facility Code] ,[Facility Name] ,[DMH ID] ,[Consumer Full Name] ,[Open Admission] ,[Local Chart Number] ,[Admission Date] ,[Admission Reason Code] ,[Admission Comment] ,[Referral Source] ,[Discharge Date] -- 日期转文本,空值显示为空字符串,非空值转为yyyy-mm-dd标准格式文本 ,ISNULL(CONVERT(VARCHAR(10), [Discharge Date], 23), '') AS [DC Date] ,[Discharge Reason Code] ,[Discharge Reason] ,[Discharge Comment] FROM [Data_Central].[CIMOR].[EpisodeOfCare] WHERE [Facility Code] IN ('005','009','026') -- 筛选出院原因或出院日期为NULL的记录,NULL判断必须使用IS NULL语法 AND ([Discharge Reason] IS NULL OR [Discharge Date] IS NULL)
关键知识点说明
- 所有主流SQL环境中,判断字段是否为空必须使用
字段名 IS NULL/字段名 IS NOT NULL语法,用=、LIKE、<>这类普通比较运算符操作NULL值,永远不会得到预期的匹配结果。 - 日期类型转字符串时建议显式指定格式编码,SQL Server中样式码
23对应通用的yyyy-mm-dd日期格式,可以避免不同实例默认区域设置不同导致的格式混乱。 - 空值替换可以直接用内置函数简化写法:SQL Server的
ISNULL()、通用标准SQL的COALESCE()都可以实现空值返回指定内容的效果,比写完整CASE语句更简洁不易出错。
内容的提问来源于stack exchange,提问作者Clay
相关产品推荐
相关产品推荐

