我的查询抛出一个错误:
从字符串转换日期和/或时间时转换失败。
我是初学者,所以当你能向我解释时会很好。
这是我的问题:
SELECT
CASE
WHEN YEAR(STAN_LICZNIKA_DATA) = 2017 THEN 'AKTUALNE'
WHEN YEAR(STAN_LICZNIKA_DATA) < 2015 THEN KIEROWCA2_DATA
WHEN YEAR(STAN_LICZNIKA_DATA) = 2016 THEN KIEROWCA1_DATA
WHEN KIEROWCA1_DATA IS NULL THEN GETDATE()
WHEN STAN_LICZNIKA_DATA is NULL THEN 'TUTAJ BYŁA WARTOŚĆ PUSTA'
END
FROM
POJAZDY
case
表达式从result_expression和可选else_result_expressionref中的类型集中返回一个优先级最高的类型。我的猜测是,指定的两个字段不是字符串。否则,GETDATE()
将丢弃所有内容。字符串将被转换为该类型。
因此,添加显式转换:
SELECT (CASE WHEN YEAR(STAN_LICZNIKA_DATA) = 2017 THEN 'AKTUALNE'
WHEN YEAR(STAN_LICZNIKA_DATA) < 2015 THEN CONVERT(NVARCHAR(4000), KIEROWCA2_DATA
WHEN YEAR(STAN_LICZNIKA_DATA) = 2016 THEN CONVERT(NVARCHAR(4000), KIEROWCA1_DATA
WHEN KIEROWCA1_DATA IS NULL THEN CONVERT(NVARCHAR(4000), GETDATE())
WHEN STAN_LICZNIKA_DATA is NULL THEN 'TUTAJ BYŁA WARTOŚĆ PUSTA'
END)
FROM POJAZDY
参见数据类型优先级