SQL datetime LIKE选择 - 为什么我需要额外的%?

时间:2013-11-07 09:40:03

标签: sql tsql datetime

有人可以向我解释为什么当我在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 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分: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'

答案 2 :(得分:0)

If the Date field is in timestamp:-
SELECT *
      FROM Table
      WHERE year(Date) = '2013'

答案 3 :(得分:0)

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

如果您想搜索记录以月1月开始

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

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

无需额外'%'。