求PSQL转TSQL等价实现:Level与Connect By替代方案
PostgreSQL转SQL Server等价语句实现
原PostgreSQL语句用于生成1到14的连续数字序列,再将其格式化为带前缀P的两位字符串(位数不足时前面补0)。以下是对应的TSQL实现方案:
核心转换说明
- PostgreSQL中通过
level+connect by level <= N生成连续数字序列的写法,在SQL Server里可以用**递归CTE(公共表表达式)**直接替代,这是最常用的等价实现方式。 - 你已经明确可以用
RIGHT(REPLICATE('0', 2) + CAST(lvl AS VARCHAR), 2)来替代PostgreSQL的lpad(lvl, length('__'), '0')(length('__')结果为2),下面的代码将直接沿用这个逻辑。
完整TSQL语句
SELECT 'P' + RIGHT(REPLICATE('0', 2) + CAST(lvl AS VARCHAR), 2) FROM ( WITH SequenceCTE AS ( SELECT 1 AS lvl UNION ALL SELECT lvl + 1 FROM SequenceCTE WHERE lvl < 14 ) SELECT lvl FROM SequenceCTE ) AS NumberSeq
执行结果
P01
P02
P03
P04
P05
P06
P07
P08
P09
P10
P11
P12
P13
P14
(注:原结果中缺失P03应为输入笔误,按代码逻辑会生成完整的1到14序列)
内容的提问来源于stack exchange,提问作者user27939296
相关产品推荐
相关产品推荐

