与Datetime列中的运算符类似

时间:2013-10-18 06:25:07

标签: sql sql-server-2008

我想在datetime列中使用Like运算符。该栏的价值如下:
2013-08-31 17:54:52.000
2013-08-31 17:54:52.000

我的查询如下:

SELECT * FROM table where created_date Like '%54%'  

工作正常。但是当我搜索'%52%'而不是'%54%'时,它什么都没给我。 (当我搜索到分钟时它正在工作,但是当我搜索秒或毫秒时它不起作用。)

我查看了以下网址,它正在工作中 SQL LIKE Statement on a DateTime Type

我想知道原因,为什么会发生这种情况以及运算符如何与datetime类型列一起使用。

2 个答案:

答案 0 :(得分:3)

我认为使用SQL SERVER的DATEPART运算符来提取日期部分会更好。

示例可能是: -

SELECT * FROM table
where DATEPART(minute,created_date)=54

修改: -

  

我想知道原因,为什么会发生这种情况以及如何像运营商一样   适用于datetime类型列。

实际上SQL Server没有为DATETIME变量的LIKE运算符提供直接支持,但是您始终可以将DATETIME转换为VARCHAR,然后尝试使用LIKE运算符。

旁注: -

MSDN说: -

  

DATEPART可用于选择列表,WHERE,HAVING,GROUP BY和   ORDER BY条款。

     

在SQL Server 2012中,DATEPART隐式地将字符串文字转换为   datetime2类型。这意味着DATEPART不支持该格式   日期作为字符串传递时的YDM。你必须明确地施放   字符串到datetime或smalldatetime类型以使用YDM格式。

答案 1 :(得分:0)

“LIKE”运算符和其他数据库提供的任何正则表达式运算符用于处理文本值。日期绝对不是文本值,它本身就是一个单独的类型。

将文本运算符应用于非文本类型(如int或DATETIME或DATETIMEOFFSET)没有意义,这就是为什么不能在任何数据库中的日期使用LIKE的原因。首先,这些值不是作为文本存储,而是存储在特定于实现的二进制形式中。

然后,虽然您可以对日期的特定文本表示使用LIKE,例如使用CAST,您必须绝对确定该表示是什么。不同的区域设置以不同的方式显示日期,包括第一年,上一年,第一个月或最后一个或其他。你会搜索什么?

而且,什么是54? 54分54秒或654毫秒?

唯一合理的解决方案是使用DATEPART检查日期的特定部分,或使用BETWEEN运算符检查范围。