SQL Server日期处理:空值显示空字符串,非空仅展示年份
解决方案
针对你在SQL Server中处理tForm.CreatedDate字段的需求,这里提供几种直接可行的写法:
方法1:使用CASE语句(兼容所有SQL Server版本)
CASE WHEN tForm.CreatedDate IS NULL THEN '' ELSE CAST(YEAR(tForm.CreatedDate) AS VARCHAR(4)) END AS FormCreatedDate
- 逻辑清晰,判断字段是否为NULL:是则返回空字符串,否则提取年份并转为字符串类型。
方法2:使用IIF函数(SQL Server 2012及以上版本)
IIF(tForm.CreatedDate IS NULL, '', CAST(YEAR(tForm.CreatedDate) AS VARCHAR(4))) AS FormCreatedDate
- 是CASE语句的简化写法,更简洁直观。
方法3:结合ISNULL与FORMAT函数
ISNULL(FORMAT(tForm.CreatedDate, 'yyyy'), '') AS FormCreatedDate
- 利用
FORMAT直接格式化年份为字符串,再用ISNULL将NULL结果替换为空字符串。
原语句问题说明
你之前的写法将FORMAT结果转为int,当CreatedDate为NULL时,FORMAT返回NULL,CAST(NULL AS INT)本身是NULL,但如果出现0或1900,大概率是字段存在默认值(如1900-01-01)而非严格NULL,或者后续处理中NULL被隐式转换。上面的写法直接返回字符串类型,严格满足“NULL时显示空字符串”的要求。
内容的提问来源于stack exchange,提问作者Abdul
相关产品推荐
相关产品推荐

