gpt4 book ai didi

sql - 从 View 中的字符串转换日期和/或时间时转换失败

转载 作者:行者123 更新时间:2023-12-04 22:33:54 24 4
gpt4 key购买 nike

我在 View 中有一个日期时间列 TAR_DATE,日期格式为 yyyy-mm-dd hh:mi:ss.mmm 我读到的是 standard format for ODBC canonical .

我需要将此 TAR_DATE 列与另一个日期进行比较:

select count(1) 
from db_view
where (case
when isdate(TAR_DATE) = 1
then convert(datetime, TAR_DATE, 121)
end) <= convert(datetime, '2016-08-25', 121)

上面的查询抛出一个错误:

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

虽然像下面这样单独执行转换工作正常:

select 
(case
when isdate(TAR_DATE) = 1
then convert(datetime, TAR_DATE, 121)
end)
from
db_view

select convert(datetime, '2016-08-25', 121)

这是什么原因造成的?

使用 try_convert() 也不起作用。它与 View 中的数据而不是表中的数据有关吗?

最佳答案

优化器可以以意外的顺序评估 case 语句。它可以决定先评估 then 分支,并仅在满足 when 条件时才使用其结果。令人惊讶的是,对于您不希望执行 then 条件的行,您会得到一个错误。

使用 try_convert防止了这个问题,而且它也更容易阅读:

wehre  try_convert(datetime, TAR_DATE, 121) <= '2016-08-25'

如果转换失败,try_convert 将返回 null 而不是引发错误。

关于sql - 从 View 中的字符串转换日期和/或时间时转换失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46631238/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com