SQL中转换日期格式并保留空白、NULL转空白,避免空白变为1900/01/01
SQL日期转换与空白/NULL处理方案
你的场景是:某列包含空白字符串、NULL值以及YYYYMMDD格式的日期,需要实现三个需求:
- 将
YYYYMMDD格式日期转换为MM/DD/YYYY格式 - 将NULL值转为空白字符串
- 保留原有的空白字符串不被修改
你原本使用的语句:
isnull(convert(char(10), cast(mytable as datetime), 101), '')
出现的问题是原空白字符串被转换为01/01/1900,原因是空白字符串被CAST为datetime类型时,会默认返回SQL的基准日期1900-01-01,这个值不是NULL,所以ISNULL不会将其替换为空白。
解决方法
可以通过两种方式实现需求:
方法1:使用CASE WHEN分支判断
逻辑直观,分情况处理不同值:
CASE WHEN mytable = '' THEN '' -- 保留原空白 WHEN mytable IS NULL THEN '' -- NULL转空白 ELSE CONVERT(char(10), CAST(mytable AS datetime), 101) -- 有效日期转换格式 END
方法2:使用NULLIF先将空白转为NULL
先把空白字符串转换为NULL,再结合ISNULL和转换逻辑:
ISNULL(CONVERT(char(10), CAST(NULLIF(mytable, '') AS datetime), 101), '')
NULLIF(mytable, '')会将等于空白的字符串转为NULL,后续CAST时如果是NULL就返回NULL,最终被ISNULL替换为空白;如果是有效日期字符串,则正常转换格式。
内容的提问来源于stack exchange,提问作者Hillary Haskins
相关产品推荐
相关产品推荐

