You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

T-SQL查询中SELECT子句内't='、'rn='写法的作用与用法

T-SQL中别名 = 列表达式写法详解

你在代码里看到的t = DATEADD(...)、rn = ROW_NUMBER(...)是SQL Server的T-SQL方言支持的列别名定义语法,本质就是给查询输出的计算列指定自定义名称,没有单独的特殊官方命名,作用和通用的表达式 AS 别名写法完全一致。

具体作用说明

  • CTE语句中的rn = ROW_NUMBER() OVER (ORDER BY [object_id]):原本是给ROW_NUMBER()生成的从1开始的连续序列列起别名为rn,但这段代码里CTE定义时已经显式指定了输出列名为n(即WITH x(n) AS),所以这里的rn别名不会对外生效,CTE最终输出的序列列名固定为n。
  • 外层查询中的t = DATEADD(HOUR, n-1, @start):给时间计算函数生成的逐小时时间值列起别名为t,后续ORDER BY t引用的就是这个列别名。

写法等价关系

这种T-SQL特有写法和ANSI SQL标准的别名写法100%等价,可以任意替换,示例如下:

-- T-SQL特有赋值式别名写法
SELECT t = DATEADD(HOUR, n-1, @start) FROM x ORDER BY t

-- 等价于ANSI标准AS别名写法(全数据库兼容)
SELECT DATEADD(HOUR, n-1, @start) AS t FROM x ORDER BY t

-- 等价于省略AS的简写写法(绝大多数数据库兼容)
SELECT DATEADD(HOUR, n-1, @start) t FROM x ORDER BY t

使用注意事项

  • 该写法仅支持SQL Server、Azure SQL等微软系T-SQL生态数据库,在MySQL、PostgreSQL、Oracle等其他数据库中使用时,=会被识别为相等判断运算符,直接触发语法错误。
  • 跨数据库兼容的场景不推荐使用这种写法,优先选择AS 别名的标准写法,兼容性和可读性更强。
  • 纯SQL Server环境的内部脚本、存储过程中可以按需使用,这种写法把列名统一放在行首,多列并排编写时对齐度更高,排查列名时更直观。

内容的提问来源于stack exchange,提问作者Daniel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 00:01:37