我想在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类型列一起使用。
答案 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运算符检查范围。