1

我想在日期时间列中使用 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%”时,它什么也没给我。(当我搜索到分钟时它正在工作,但是当我搜索秒或毫秒时它不起作用。)

我查看了以下 url,它
在 DateTime 类型上运行 SQL LIKE 语句

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

4

2 回答 2

3

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

示例可能是:-

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

编辑:-

我想知道发生这种情况的原因,以及 like 运算符如何与 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 格式。

于 2013-10-18T06:26:36.727 回答
1

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

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

然后,虽然您可以使用LIKE日期的特定文本表示,例如使用 CAST,但您必须绝对确定该表示是什么。不同的语言环境以不同的方式显示日期,首先是年份,最后一年,第一个月或最后一个等等。你会搜索什么?

此外,什么是 54?54 分钟、54 秒还是 654 毫秒?

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

于 2013-10-18T07:03:28.297 回答