喜欢日期时间列中的运算符



我想在日期时间列中使用 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 语句

我想知道原因,为什么会发生这种情况以及运算符如何使用日期时间类型列。

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

例子可能是这样的:-

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

编辑:-

我想知道原因,为什么会发生这种情况以及操作员如何 适用于日期时间类型列。

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

附带说明:-

MSDN 说:-

DATEPART 可以在选择列表中使用,其中、具有、分组依据和 排序依据子句。

在 SQL Server 2012 中,DATEPART 隐式将字符串文本转换为 日期时间 2 类型。这意味着 DATEPART 不支持该格式 YDM 当日期作为字符串传递时。您必须显式转换 字符串到日期时间或小日期时间类型以使用 YDM 格式。

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

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

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

此外,什么是54?54

分钟,54秒或654毫秒?

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

最新更新