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

Sql 将INT数据类型转换为DateTime格式,sql,Sql,//这是我的脚本 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

//这是我的脚本

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
//我的输出是

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
//预期输出:

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
输出应仅为“”,正确的脚本是什么?注意:
iPaid\u dt
INT
,默认值为0。

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


我不能说如何修复它,因为我不知道你为什么要首先进行这种转换。可能
NULL
'

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


我不能说如何修复它,因为我不知道你为什么要首先进行这种转换。可能
NULL
'
更好的占位符?

您正在混合字段类型,SQL Server正在为您将
'
转换为
日期时间。试试这个:

SELECT    CASE
              WHEN iPaid_dt > 0
                  THEN CONVERT(NVARCHAR(23),
                        CONVERT(DATETIME, CONVERT(CHAR(8),iPaid_dt)))
              ELSE ''
          END AS [TRANSACTION DATE]
FROM      MyTable

您正在混合字段类型,SQL Server正在为您将
'
转换为
日期时间。试试这个:

SELECT    CASE
              WHEN iPaid_dt > 0
                  THEN CONVERT(NVARCHAR(23),
                        CONVERT(DATETIME, CONVERT(CHAR(8),iPaid_dt)))
              ELSE ''
          END AS [TRANSACTION DATE]
FROM      MyTable

使用ISNULL函数并将值更改为期望值:ISNULL(x,,)将ELSE NULL改为ELSE“”,该日期的
iPaid\u nt
值是多少?使用ISNULL函数并将值更改为期望值:ISNULL(x,,)