SQL Select查询中null整数转空 拼接字符串去除多余0方法
问题原因
- 核心问题是
ISNULL的隐式类型转换规则:EndYr为int类型,数据类型优先级高于字符串类型的空值'',因此当EndYr为NULL时,ISNULL(WorkExperience.EndYr,'')会把空字符串自动转为int类型的0,导致拼接结果出现多余的0。 - 同为int类型的
StartYr如果为NULL,也会触发同类隐式转换问题。
解决方案
只需要先把int类型的年份字段显式转为字符串类型,再做NULL判断即可,修正后的SQL如下:
Concat( ISNULL(CAST(WorkExperience.StartYr AS VARCHAR(4)), ''), ' ', ISNULL(WorkExperience.StartMonth, ''), ' to ', ISNULL(CAST(WorkExperience.EndYr AS VARCHAR(4)), ''), ISNULL(WorkExperience.EndMonth, 'Current Job '), '--', WorkExperience.PositionLevel, '(', CompanyTable.CompanyName, ')' ) AS 'Employment History'
如果是MySQL环境,可替换为IFNULL函数,逻辑完全一致:
Concat( IFNULL(CAST(WorkExperience.StartYr AS CHAR(4)), ''), ' ', IFNULL(WorkExperience.StartMonth, ''), ' to ', IFNULL(CAST(WorkExperience.EndYr AS CHAR(4)), ''), IFNULL(WorkExperience.EndMonth, 'Current Job '), '--', WorkExperience.PositionLevel, '(', CompanyTable.CompanyName, ')' ) AS `Employment History`
上述写法同时兼容StartYr为NULL的场景,不会出现多余的0或异常占位。
内容的提问来源于stack exchange,提问作者SkullW0lf
相关产品推荐
相关产品推荐

