关于DateTime类型的SQL LIKE语句

Sun*_*Sun 11 sql datetime sql-server-2008

如何在SQL Server中LIKEDateTime数据类型列上执行语句?

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

SELECT * FROM MyTable where CheckDate LIKE '%2009%'
Run Code Online (Sandbox Code Playgroud)

但是,如果我想要10月,11月和12月的所有日期,我希望能够做到以下几点:

SELECT * FROM MyTable where CheckDate LIKE '%2009-1%'
Run Code Online (Sandbox Code Playgroud)

但这没有给我任何回报!

我给用户一个过滤选项,他们输入日期字符串,当他们输入我过滤数据.因此,如果他们键入'20',我想在日期内返回所有日期为'20'(所以这可能是所有2012日期或日期值,如06/20/1999)

有人可以帮忙吗?

我正在使用SQL Server 2008.

提前致谢.

Dam*_*ver 20

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

SELECT * FROM MyTable
where DATEPART(year,CheckDate)=2009 and
      DATEPART(month,CheckDate) between 10 and 12
Run Code Online (Sandbox Code Playgroud)

(还有特别命名的函数,例如MONTHYEAR,但我更喜欢DATEPART一致性,因为它可以访问a的所有组件datetime)

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


LLA*_*ive 5

你可以使用这样的东西:

SELECT * 
FROM MyTable 
WHERE CheckDate >= '2009-10-01' AND CheckDate < '2010-01-01';
Run Code Online (Sandbox Code Playgroud)

  • 危险的。虽然原始查询强制将“datetime”转换为字符串(因此将始终生成格式一致的值),但这会强制从字符串转换为“datetime”,并且根据区域设置,实际上可能会查询任何内容2009 年 1 月 10 日或之后 (3认同)

Mag*_*nus 5

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

SELECT * 
FROM MyTable 
WHERE CONVERT(VARCHAR, CheckDate, 120) LIKE '%2009-1%'
Run Code Online (Sandbox Code Playgroud)