为什么我的SQL代码会引发转换错误?

时间:2018-11-02 13:57:57

标签: sql sql-server

我的查询抛出错误:

  

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

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

这是我的查询

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

1 个答案:

答案 0 :(得分:5)

case表达式返回result_expressions和可选的else_result_expression ref中的一组类型中优先级最高的单个类型。我的猜测是指定的两个字段不是字符串。如果没有,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

See Data type precedence