1

有人可以向我解释为什么当我LIKE在 SQL (T-SQL) 中对varchar列执行选择时,我可以执行以下操作:

SELECT *
  FROM Table
  WHERE Name LIKE 'Th%'

获取以 开头的名称Th,但是当我在datetime列上执行相同操作时,我需要%在一年之前使用,例如:

SELECT *
  FROM Table
  WHERE Date LIKE '%2013%'

获取 2013 年的日期。日期时间以yyyy-MM-dd hh:mm:ss格式存储。我知道我可以使用DATEPART样式查询,但我只是对为什么我需要额外的内容感兴趣%

4

4 回答 4

5

DATETIME 在比较之前转换为 VARCHAR ,并且绝对不能保证转换将采用您提到的模式。DATETIME 在内部不是作为 VARCHAR 而是作为 FLOAT 存储的。

于 2013-11-07T09:49:03.380 回答
2

您应该停止怀疑,因为语法没有用。

SELECT *
FROM Table
WHERE Date LIKE '%2013%'

将为您提供全表扫描,因为在比较时日期将转换为 varchar。换句话说,不要这样做!

请改用此语法:

SELECT *
FROM Table
WHERE Date >= '2013-01-01T00:00:00'
  and Date < '2014-01-01T00:00:00'
于 2013-11-07T09:54:03.307 回答
0
If the Date field is in timestamp:-
SELECT *
      FROM Table
      WHERE year(Date) = '2013'
于 2013-11-07T09:51:03.247 回答
0

sql server 将日期时间转换为这种格式(1900 年 1 月 1 日上午 9:20)。由于这个原因,我们需要使用额外的 %。

如果你想搜索从一月开始的记录

您可以使用以下查询日期时间

SELECT *
FROM Table
WHERE Date LIKE 'Jan%'.

不需要额外的'%'。

于 2013-11-07T09:54:01.977 回答