有一个名为 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/