首页 > 解决方案 > 在 select 语句中使用函数,我可以在同一个 select 语句中使用函数的结果吗?

问题描述

我有以下代码:

SELECT [TransactionId]
        , min([Timestamp]) as [Begin]
        , max([Timestamp]) as [End]
        ,DATEDIFF(ss, min([Timestamp]), max([Timestamp])) as [TurnAroundTime]

我可以在 中使用[Begin][End]名称DATEDIFF吗?

标签: sqlsql-servertsql

解决方案


不,不是在同一语句中,因为它们是伪同时执行的,因此在评估DATEDIFF函数时,Begin 和 End 仍然不存在。

无论如何,为了可读性,您可以使用子查询 - 甚至更好的是公用表表达式:

WITH #computed AS (
   SELECT 
      MIN(Timestamp) AS [Begin],
      MAX(Timestamp) AS [End]
   FROM YourTable
)
SELECT 
   [Begin],
   [End],
   DATEDIFF(ss, [Begin], [End]) TurnAroundTime
FROM #computed

在我的系统 (SQL Server 2017) 上,这两种解决方案都会导致完全相同的执行计划,因此 CTE 解决方案不会产生任何开销 - 不过,请在您的系统上进行测试和检查。

附注:尽量避免在列别名中使用保留字(例如 Begin 和 End),以提高可读性并避免错误。


推荐阅读