关于DateTime类型的SQL LIKE语句

时间:2012-08-16 10:47:08

标签: sql sql-server-2008 datetime

如何在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。

提前致谢。

3 个答案:

答案 0 :(得分:20)

您可以使用DATEPART功能提取部分日期。它还应该使您的查询更明确地了解您要实现的目标:

SELECT * FROM MyTable
where DATEPART(year,CheckDate)=2009 and
      DATEPART(month,CheckDate) between 10 and 12

(还有一些特别命名的函数,例如MONTHYEAR,但我更喜欢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';