有人可以向我解释为什么当我在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
样式查询,但我只是对我为什么需要额外的%
感兴趣。
答案 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%'.
无需额外'%'。