在tsql where子句中应该是YEAR()MONTH()DAY()的顺序是什么?

Som*_*Som -2 sql t-sql sql-server 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
Run Code Online (Sandbox Code Playgroud)

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

Lam*_*mak 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)
Run Code Online (Sandbox Code Playgroud)

  • @ t-clausen.dk请查找示例.在我见过的每种情况下,SQL Server都足够聪明,只能评估一次GETDATE(),所以我不确定它是如何导致查询速度慢的. (2认同)