SQL 将字符串转换为日期有效,但从中计算无效

SQL Convert string to Date works, but calculations from it does not

我在处理将 NVarchar 字段转换为日期字段的查询时遇到问题。

我使用了代码 convert(date,answer) 并且它有效,但是当我尝试将 case 语句与此和另一个转换 (convert(date,answer2)) 一起使用时,它不起作用。

我试过下面的代码

select

  CASE WHEN CP >= REF THEN 1 ELSE 0 END AS CPY

from(

SELECT
convert(date,A.answer) as CP,

convert(date,B.answer) AS REF

from table_a as A
      left join table_b as B on A.ID = B.ID

  )m

WHERE (CASE WHEN CP >= REF THEN 1 ELSE 0 END) = 0

我试过创建另一个外部查询,只是说 CPY = 0 在哪里,但我得到了同样的错误。

我得到的错误是

'Conversion failed when converting date and/or time from character string.'

我不确定为什么 convert 可以完美地工作,但是 case when 对答案的陈述是行不通的。

我无法修改数据库中的数据,我们必须使用现有的数据。

感谢任何帮助。

只需使用 try_convert() 即可:

SELECT try_convert(date, A.answer) as CP,
       try_convert(date, B.answer) AS REF

您的转换字符串值无效。但是,SQL 服务器不会对查询中的子句进行排序,因此过滤可能不会在转换之前发生。 try_convert() 应该可以解决问题。

见下文 query.Column 名称未被识别,以防您在外部查询中出现。

您必须将其替换为实际转换后的 date.Please,见下文。

    select
    CASE WHEN CP >= REF THEN 1 ELSE 0 END AS CPY
    from(
    SELECT
    convert(date,A.answer) as CP,
    convert(date,B.answer) AS REF
    from( table_a as A
    left join table_b as B on A.ID = B.ID)
    WHERE (CASE WHEN convert(date,A.answer) >= convert(date,B.answer)  THEN 1 ELSE 0 
    END) = 0

请尝试此查询,如果仍然面临 conversion error,请告诉我。

SELECT CASE 
        WHEN CP >= REF
            THEN 1
        ELSE 0
        END AS CPY
FROM (
    SELECT CAST(A.answer AS DATE) AS CP
        ,CAST(B.answer AS DATE) AS REF
    FROM table_a AS A
    LEFT JOIN table_b AS B ON A.ID = B.ID
    )
WHERE 0 = CASE 
        WHEN CP >= REF
            THEN 1
        ELSE 0
        END

您好,感谢所有试图回答我的问题的人。

经过多次尝试失败并请来了一些SQL专家,我们未能找到答案......直到今天!

问题出在数据格式上。答案有两种可能的格式,日期和 date/time,因此这是导致错误发生的原因。

我通过使用子字符串从所有日期中删除时间戳,然后将它们转换为日期来修复它。这似乎工作正常,我们现在有一个运行的报告。 :)