0

考虑以下:

SELECT [DOB] = CASE WHEN [DOB] = '-' then 'invalid date' ELSE cast([DOB] as datetime) 
END
FROM myTable where myID = 73351

DOB = '-',我收到错误消息:

从字符串转换日期时间时转换失败。

这似乎表明 SQL Server 尝试将 DOB 转换为datetime尽管它应该只打印的事实'invalid date'

'invalid date'然而考虑一下当 时正确返回的这个DOB = '-'

SELECT [DOB] = CASE WHEN [DOB] = '-' then 'invalid date' ELSE 'valid date'
END
FROM myTable where myID = 73351

我怎样才能让第一条语句在什么'invalid date'时候返回DOB = '-'

4

2 回答 2

2

case 表达式将只产生一种数据类型。不能有不同行的不同数据类型。查询中的数据类型将为 adatetime并且invalid date是无效的日期时间值。

当 DOB = '-' 时,如何让第一条语句返回“无效日期”?

唯一的方法是不要将值转换为datetime.

CASE WHEN [DOB] = '-' then 'invalid date' ELSE [DOB] END
于 2013-07-08T17:22:21.467 回答
1

您正在创建一个具有 2 种单独数据类型、varchar 和 datetime 的列。尝试将两种可能性都转换为 SQL_VARIANT。

SELECT [DOB] =
CASE
    WHEN [DOB] = '-' THEN CAST('Invalid' as sql_variant)
    ELSE CAST(CAST([DOB] as DATETIME) as sql_variant)
END

http://msdn.microsoft.com/en-us/library/ms173829(v=sql.90).aspx

于 2013-07-08T17:35:18.137 回答