【问题标题】:what should be order of YEAR() MONTH() DAY() in a tsql where clause?sql where 子句中 YEAR() MONTH() DAY() 的顺序应该是什么?
【发布时间】:2013-07-11 13:23:52
【问题描述】:

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 如何执行此语句?

【问题讨论】:

标签: sql sql-server tsql query-designer


【解决方案1】:

如果你想提高性能,那你就做错了。您正在使用的过滤器不会使用索引(如果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)

【讨论】:

  • @t-clausen.dk 不,你错了。在此查询中,GETDATE() 将只被评估一次,DATEADD() 函数调用也将被评估一次。
  • @t-clausen.dk 请查找示例。在我见过的每一种情况下,SQL Server 都足够聪明,只能评估 GETDATE() 一次,所以我不确定它如何导致查询缓慢。
猜你喜欢
  • 2012-03-17
  • 1970-01-01
  • 2021-12-12
  • 1970-01-01
  • 2010-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-15
相关资源
最近更新 更多