这个 SELECT 语句的逻辑处理顺序是
一种)FROM tbl_hugo_game
b)WHERE numberofminutes <> NULL
C)
SELECT
DATEDIFF(millisecond ,tbl_hugo_game.time_start,tbl_hugo_game.time_end) AS NumberOfMinutes
d)ORDER BY numberofminutes ASC
因此,步骤 c)(带有 DATEDIFF ... AS NumberOfMinutes 计算字段的 SELECT 子句)在步骤 b)(WHERE 子句)之后和步骤 d)(ORDER BY 子句)之前处理。这就是为什么步骤 c) (DATEDIFF ... AS NumberOfMinutes) 中的计算域不能用于 WHERE 子句(步骤 b)但可以用于 ORDER BY 子句(步骤 d)的原因。
参考资料:SELECT (Transact-SQL) # SELECT语句的逻辑处理顺序
以下步骤显示了 SELECT 语句的逻辑处理顺序或绑定顺序。此顺序确定一个步骤中定义的对象何时可用于后续步骤中的子句。例如,如果查询处理器可以绑定(访问)在 FROM 子句中定义的表或视图,则这些对象及其列可用于所有后续步骤。相反,因为 SELECT 子句是第 8 步,所以在该子句中定义的任何列别名或派生列都不能被前面的子句引用。但是,它们可以被后续子句引用,例如 ORDER BY 子句。请注意,语句的实际物理执行由查询处理器确定,并且顺序可能与此列表不同。
- 从
- 在
- 加入
- 在哪里
- 通过...分组
- WITH CUBE 或 WITH ROLLUP
- 拥有
- 选择
- 清楚的
- 订购方式
- 最佳