gpt4 book ai didi

sql-server - 将 DateTime 转换为 VARCHAR,然后使用 LIKE 时出现奇怪的结果

转载 作者:行者123 更新时间:2023-12-03 01:13:15 24 4
gpt4 key购买 nike

有一个名为 OrderDate 的列(数据如下:2007-06-02 00:00:00.000)

我尝试使用 LIKE 获取 2007-06 年的日期:

WHERE OrderDate LIKE '2007-06%'

但什么也得不到。然后我尝试了 CAST:

WHERE CAST(OrderDate AS VARCHAR) LIKE '2007-06%'

还是一无所获。有人请帮我吗?我只是想使用 LIKE 来做到这一点。

此外,WHERE OrderDate LIKE '%2007%' 可以获取从 2007 年开始的数据,但 '2007%' 什么也没有。SQL 的新入门者。谢谢!!

最佳答案

WHERE OrderDate >= '2007-06-01' AND OrderDate < '2007-07-01'

使用日期时间实例来比较日期时间,不要尝试转换为字符串。值 '2007-06-01' 将被转换为 DateTime,'2007-07-01' 也将被转换为 DateTime。 OrderDate 应该已经是 Date 或 DateTime 类型。

如果您想检索日期或日期时间的一部分,还可以使用内置函数。

<小时/>

编辑

这不起作用的原因 WHERE CAST(OrderDate AS VARCHAR) LIKE '2007-06%' 是因为您没有指定 varchar 的长度。一旦日期时间转换为字符串,以下内容将获取日期时间的前 7 个字符。

WHERE CAST(OrderDate AS VARCHAR(7)) LIKE '2007-06%'

另一个问题是,当您使用强制转换时,无法保证会输出哪种格式。如果您想要字符串输出,您应该使用 CONVERT 并指定输出格式。对于 ISO8601 格式,请执行此操作。

WHERE CONVERT(VARCHAR(10), OrderDate, 126) LIKE '2007-06%'

再说一遍,我真的不推荐这种方法。最好的情况是,如果数据上有任何索引,它将忽略它们,从而使您的查询非常慢。最坏的情况是,您在查询中使用不正确的日期时间比较字符串犯了错误,但它永远不会被捕获,因为它被视为 varchar (如果您尝试2016-,我上面的原始查询会引发错误06-32)

关于sql-server - 将 DateTime 转换为 VARCHAR,然后使用 LIKE 时出现奇怪的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43692210/

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