有一个名为OrderDate (data like this :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中的新入门者。
谢谢!
答案 0 :(得分:3)
WHERE OrderDate >= '2007-06-01' AND OrderDate < '2007-07-01'
使用datetime实例比较日期时间,不要尝试转换为字符串。值'2007-06-01'
将'2007-07-01'
转换为DateTime。 OrderDate应该已经是Date或DateTime类型。
如果您想要检索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
,我上面的原始查询会引发错误)
答案 1 :(得分:0)
使用YEAR
和MONTH
代替LIKE
WHERE
YEAR(OrderDate) = 2017 AND
MONTH(OrderDate) = 6
您可以使用下面的查询查看输出。你会看到问题。
例如
SELECT CAST(OrderDate AS VARCHAR) -- May 27 2017 1:22AM