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
相关产品推荐
相关产品推荐

