将INT数据类型转换为DateTime格式

时间:2013-05-10 08:07:38

标签: sql

//这是我的脚本

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_dtINT,默认值为0。

2 个答案:

答案 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