为什么我的SQL代码会抛出转换错误



我的查询抛出一个错误:

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

我是初学者,所以当你能向我解释时会很好。

这是我的问题:

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

参见数据类型优先级

最新更新