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
相关产品推荐
相关产品推荐

