11

如何在 SQL ServerLIKE中对数据类型的列执行语句?DateTime

如果我运行以下 SQL,它会返回 2009 年的所有日期。

SELECT * FROM MyTable where CheckDate LIKE '%2009%'

但是,如果我想要所有 10 月、11 月和 12 月的日期,我希望能够执行以下操作:

SELECT * FROM MyTable where CheckDate LIKE '%2009-1%'

但这没有给我任何回报!

我为用户提供了一个过滤选项,他们在其中键入日期字符串,并在他们键入时过滤数据。因此,如果他们输入“20”,我想返回日期内所有带有“20”的日期(所以这可能是所有 2012 年的日期或像 06/20/1999 这样的日期值)

有人可以帮忙吗?

我正在使用 SQL Server 2008。

提前致谢。

4

3 回答 3

21

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

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

(也有专门命名的函数,例如MONTHand YEAR,但我更喜欢DATEPART一致性,因为它可以访问 a 的所有组件datetime

您应该尽量避免将datetimes 视为具有任何类型的字符串格式。将它们视为字符串是我们遇到的最大错误来源之一。

于 2012-08-16T10:49:25.863 回答
7

如果您需要使用Like运算符(出于某种原因),您必须将DateTime列转换为varchar.

SELECT * 
FROM MyTable 
WHERE CONVERT(VARCHAR, CheckDate, 120) LIKE '%2009-1%'
于 2012-08-16T10:50:39.810 回答
4

你可以使用这样的东西:

SELECT * 
FROM MyTable 
WHERE CheckDate >= '2009-10-01' AND CheckDate < '2010-01-01';
于 2012-08-16T10:50:07.173 回答