转换INT数据类型为日期时间格式
问题描述:
//这是我的脚本转换INT数据类型为日期时间格式
SELECT CASE WHEN iPaid_dt>= 1 THEN CONVERT(DATETIME, CONVERT(CHAR(8),iPaid_dt)) ELSE '' END AS [TRANSACTION DATE]
FROM MyTable
//我的输出是
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
输出应该是''唯一的,什么是正确的脚本? note:iPaid_dt
为INT
,默认值为0。
答
你在混合字段类型,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
答
A CASE
表达式必须具有所有行必须属于的所有可能值的单一数据类型。由于DATETIME
的优先级高于VARCHAR
,因此所有可能的值都被强制为DATETIME
s。所以''
被转换回DATETIME
。
我不能说如何解决它,因为我不知道你为什么要做这个转换。也许NULL
会比''
更好的占位符?
把ELSE NULL改为否则'' – mojtaba 2013-05-10 08:14:42
那个*是那个'iPaid_nt'在那个1900年代的值? – 2013-05-10 08:15:39
使用ISNULL函数并将值更改为期望值:isnull(x,'') – mojtaba 2013-05-10 08:20:13