1

//这是我的脚本

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输出应该只有'',什么是正确的脚本?注意:默认值为 0 iPaid_dtINT

4

2 回答 2

3

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

我不能说如何解决它,因为我不知道你为什么首先要进行这种转换。也许NULL会比''?

于 2013-05-10T08:13:52.433 回答
2

您正在混合字段类型,而 SQL Server 正在为您转换''为 a 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
于 2013-05-10T08:14:05.817 回答