You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 10:25:05