//这是我的脚本
SELECT CASE WHEN iPaid_dt>= 1 THEN CONVERT(DATETIME, CONVERT(CHAR(8),iPaid_dt)) ELSE '' END AS [TRANSACTION DATE]
FROM MyTable
//我的OutPut
1900-01-01 00:00:00.000
2012-11-11 00:00:00.000
2012-10-26 00:00:00.000
//预期输出:
2012-11-11 00:00:00.000
2012-10-26 00:00:00.000
// 1900-01-01
输出应该是''只有,正确的脚本是什么?注意:iPaid_dt
为INT
,默认值为0。
答案 0 :(得分:3)
CASE
表达式必须具有单个数据类型,所有行的所有可能值都必须属于该数据类型。由于DATETIME
的优先级高于VARCHAR
,因此所有可能的值都被强制为DATETIME
s。因此,''
会转换回DATETIME
。
我不知道如何修复它,因为我不知道你为什么要首先进行这种转换。也许NULL
比''
更好占位符?
答案 1 :(得分:2)
您正在混合字段类型,SQL Server正在为您转换''
到DATETIME
。试试这个:
SELECT CASE
WHEN iPaid_dt > 0
THEN CONVERT(NVARCHAR(23),
CONVERT(DATETIME, CONVERT(CHAR(8),iPaid_dt)))
ELSE ''
END AS [TRANSACTION DATE]
FROM MyTable