gpt4 book ai didi

sql-server - SQL Server 日期时间转换失败

转载 作者:行者123 更新时间:2023-12-02 05:39:56 25 4
gpt4 key购买 nike

我有一张有 100 万多条记录的大表。不幸的是,创建表格的人决定将日期放在 varchar(50) 中。 field 。

我需要做一个简单的日期比较 -

datediff(dd, convert(datetime, lastUpdate, 100), getDate()) < 31

但它在 convert() 上失败了:
Conversion failed when converting datetime from character string.

好像那个领域有不喜欢的东西,而且记录这么多,光看也看不出来。如何正确清理整个日期字段,使其不会在 convert() 上失败?这是我现在拥有的:
select count(*)
from MyTable
where
isdate(lastUpdate) > 0
and datediff(dd, convert(datetime, lastUpdate, 100), getDate()) < 31

@SQLMenace

在这种情况下,我不关心性能。这将是一次查询。将表更改为日期时间字段不是一种选择。

@Jon Limjap

我已经尝试添加第三个参数,它没有任何区别。

@SQLMenace

The problem is most likely how the data is stored, there are only two safe formats; ISO YYYYMMDD; ISO 8601 yyyy-mm-dd Thh:mm:ss:mmm (no spaces)


isdate() 不会吗?检查照顾这个?

我不需要 100% 的准确率。我只想获取过去 30 天的大部分记录。

@SQLMenace
select isdate('20080131') -- returns 1
select isdate('01312008') -- returns 0

@Brian Schkerke

Place the CASE and ISDATE inside the CONVERT() function.



谢谢!做到了。

最佳答案

放置CASEISDATE里面CONVERT()功能。

SELECT COUNT(*) FROM MyTable
WHERE
DATEDIFF(dd, CONVERT(DATETIME, CASE IsDate(lastUpdate)
WHEN 1 THEN lastUpdate
ELSE '12-30-1899'
END), GetDate()) < 31

替换 '12-30-1899'使用您选择的默认日期。

关于sql-server - SQL Server 日期时间转换失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28110/

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