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

SQL空日期替换返回1900-01-01,如何实现双列为空时返回空字符串

问题原因

你遇到的1900-01-01返回值是SQL Server的隐式类型转换导致的:ISNULL的返回类型和第一个输入参数的类型保持一致,你第一个参数是convert(date,...)返回的date类型,内层ISNULL传入的空字符串''会被隐式转换为date类型,SQL Server中空字符串转date的默认值就是1900-01-01。

解决方案

调整思路为:先判断两个日期字段是否同时为NULL,是则直接返回空字符串,否则取有效值转换为统一的字符串格式输出,避免类型隐式转换。

写法1(兼容SQL Server 2012及以上版本,用IIF简化)

IIF(
    [ADRCBook Details].RCBDate IS NULL AND [Transaction Details].TDJournalDate IS NULL,
    '',
    CONVERT(VARCHAR(10), ISNULL(CONVERT(DATE, [ADRCBook Details].RCBDate, 112), CONVERT(DATE, [Transaction Details].TDJournalDate, 112)), 23)
)

如果需要输出yyyyMMdd格式的日期,把最后CONVERT的格式码23改成112即可。

写法2(兼容所有SQL Server版本,用CASE语句)

CASE
    WHEN [ADRCBook Details].RCBDate IS NULL AND [Transaction Details].TDJournalDate IS NULL THEN ''
    ELSE CONVERT(VARCHAR(10), ISNULL(CONVERT(DATE, [ADRCBook Details].RCBDate, 112), CONVERT(DATE, [Transaction Details].TDJournalDate, 112)), 23)
END

内容的提问来源于stack exchange,提问作者Mark

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 02:57:03