什么应该是一个sql where子句中的YEAR()MONTH()DAY()的顺序?

时间:2013-07-11 13:23:53

标签: sql sql-server tsql query-designer

在tsql的where子句中,YEAR DAY MONTH的顺序应该是多少?

Select * from TABLE_NAME 
WHERE
YEAR(COLUMN_NAME)=YEAR(GETDATE()) --1
and DAY(COLUMN_NAME)=DAY(GETDATE()) --2
and MONTH(COLUMN_NAME)=MONTH(GETDATE()) --3

订单是否会改善查询的运行时间? tsql如何执行此语句?

1 个答案:

答案 0 :(得分:5)

如果你想提高性能,那么你做错了。您正在使用的过滤器将不使用索引(如果COLUMN_NAME上存在索引),因为您正在向它们应用函数。正确的做法是将该列直接与GETDATE()进行比较(在这种情况下)。这是一种更好的方法:

SELECT * 
FROM TABLE_NAME 
WHERE COLUMN_NAME >= DATEADD(DAY,DATEDIFF(DAY,0,GETDATE()),0)
AND COLUMN_NAME < DATEADD(DAY,DATEDIFF(DAY,0,GETDATE()),1)