sql - 在 select 语句中使用函数,我可以在同一个 select 语句中使用函数的结果吗?
问题描述
我有以下代码:
SELECT [TransactionId]
, min([Timestamp]) as [Begin]
, max([Timestamp]) as [End]
,DATEDIFF(ss, min([Timestamp]), max([Timestamp])) as [TurnAroundTime]
我可以在 中使用[Begin]
和[End]
名称DATEDIFF
吗?
解决方案
不,不是在同一语句中,因为它们是伪同时执行的,因此在评估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),以提高可读性并避免错误。
推荐阅读
- r - R中的右对齐列
- mysql - 无法获取日期时间小于系统日期的记录
- ios - 视觉框架:在跟踪用户的面部时,如何让图像(如帽子)与面部同步移动?
- javascript - javascript密码输入验证启动模式
- sql - 如何通过查询获取 SQL 表外键类型
- angular - 如何在Angular 6的OwlDateTime中设置手动输入的日期
- javascript - 如何避免在 javascript for 循环中重复代码?
- c# - Selenium - 调用项目 DLL 来运行测试用例 c# 问题
- javascript - 如何使用 CDN 在 Vue.js 中包含外部模板?
- google-bigquery - 在 bigquery 中使用 _PARTITIONTIME 的子查询不会限制成本