2013-05-10 119 views
1

//这是我的脚本转换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_dtINT,默认值为0。

+0

把ELSE NULL改为否则'' – mojtaba 2013-05-10 08:14:42

+0

那个*是那个'iPaid_nt'在那个1900年代的值? – 2013-05-10 08:15:39

+0

使用ISNULL函数并将值更改为期望值:isnull(x,'') – mojtaba 2013-05-10 08:20:13

回答

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 
3

A CASE表达式必须具有所有行必须属于的所有可能值的单一数据类型。由于DATETIME的优先级高于VARCHAR,因此所有可能的值都被强制为DATETIME s。所以''被转换回DATETIME

我不能说如何解决它,因为我不知道你为什么要做这个转换。也许NULL会比''更好的占位符?