需要 TSQL 中的 PSQL 等效项
select 'P' || lpad(lvl, length('__'), '0')
from (select level lvl from dual connect by level <= 14)
我只能访问 select 语句。
PSQL 结果是
P01
P02
P04
P05
P06
P07
P08
P09
P10
P11
P12
P13
P14
研究完成。 已使用 TSQL RIGHT 和 REPLICATE 使 LPAD 等效。需要了解级别并通过等效连接?
在 T-SQL 中,没有与 Oracle 的
CONNECT BY
和 LEVEL
直接等效的函数,但您可以使用 公用表表达式 (CTE) 和 ROW_NUMBER()
函数来模拟此行为。以下是如何在 T-SQL 中获得与 PostgreSQL (PSQL) 查询相同的结果。
SELECT 'P' || LPAD(lvl, LENGTH('__'), '0')
FROM (SELECT LEVEL lvl FROM dual CONNECT BY LEVEL <= 14);
WITH CTE_Level AS (
SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS lvl
FROM sys.objects
)
SELECT 'P' + RIGHT(REPLICATE('0', 2) + CAST(lvl AS VARCHAR(2)), 2)
FROM CTE_Level
WHERE lvl <= 14;
LEVEL
。它为行分配一个唯一的连续整数,从 1 开始。LPAD
。 REPLICATE('0', 2)
函数用零填充 lvl
最多两个字符,并且 RIGHT
确保我们只采用最后两个字符(例如,01
、02
、03
等)。CONNECT BY LEVEL <= 14
。P01
P02
P03
P04
P05
P06
P07
P08
P09
P10
P11
P12
P13
P14
这个 T-SQL 等效查询将为您提供所需的结果。