如何在SQL Server中的LIKE
数据类型列上执行DateTime
语句?
如果我运行以下SQL,则返回2009年的所有日期。
SELECT * FROM MyTable where CheckDate LIKE '%2009%'
然而,如果我想要所有10月,11月和11月12月的日期我希望能够做到以下几点:
SELECT * FROM MyTable where CheckDate LIKE '%2009-1%'
但这没有给我任何回报!
我给用户一个过滤选项,他们输入日期字符串,当他们输入时我会过滤数据。因此,如果他们键入'20',我想在日期内返回所有日期为'20'(所以这可能是所有2012日期或日期值,如06/20/1999)
有人可以帮忙吗?
我正在使用SQL Server 2008。
提前致谢。
答案 0 :(得分:20)
您可以使用DATEPART
功能提取部分日期。它还应该使您的查询更明确地了解您要实现的目标:
SELECT * FROM MyTable
where DATEPART(year,CheckDate)=2009 and
DATEPART(month,CheckDate) between 10 and 12
(还有一些特别命名的函数,例如MONTH
和YEAR
,但我更喜欢DATEPART
,因为它可以访问datetime
的所有组件<) / p>
您应该尽量避免将datetime
s视为具有任何类型的字符串格式。将它们视为字符串是我们遇到的最大错误来源之一。
答案 1 :(得分:5)
如果您需要使用Like
运算符(由于某种原因),您必须将DateTime
列转换为varchar
。
SELECT *
FROM MyTable
WHERE CONVERT(VARCHAR, CheckDate, 120) LIKE '%2009-1%'
答案 2 :(得分:2)
您可以使用以下内容:
SELECT *
FROM MyTable
WHERE CheckDate >= '2009-10-01' AND CheckDate < '2010-01-01';