请考虑以下事项:
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 = '-'
的语句?
答案 0 :(得分:2)
case表达式只会产生一种数据类型。您不能拥有不同行的不同数据类型。查询中的数据类型为datetime
,invalid date
是无效的日期时间值。
当DOB =时,如何获得第一个返回'无效日期'的语句 ' - '?
唯一的方法是不将值转换为datetime
。
CASE WHEN [DOB] = '-' then 'invalid date' ELSE [DOB] END
答案 1 :(得分: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