枚举Oracle中按字母顺序排列的行

枚举Oracle中按字母顺序排列的行,oracle,sorting,alphabet,alphabetized,Oracle,Sorting,Alphabet,Alphabetized,我想知道在oracle中是否可以将行号(例如,我们可以使用row\u number()来获取数字)替换为字母编号 让我们假设得到类似于 NO | Name | Surname ================ A | John | Doe B | Will | Doe C | Jim | Wonder 而不是 NO | Name | Surname | ================= 1 | John | Doe 2 | Will | Doe 3 | Jim | Wonde

我想知道在oracle中是否可以将行号(例如,我们可以使用
row\u number()
来获取数字)替换为字母编号

让我们假设得到类似于

NO | Name | Surname
================
A  | John | Doe
B  | Will | Doe
C  | Jim  | Wonder
而不是

NO | Name | Surname |
=================
1  | John | Doe
2  | Will | Doe
3  | Jim  | Wonder
我有一个想法,创建一个类似“ABCDEFG”的变量,并将行号转换为正确的
SUBSTR
,但这听起来有点不稳定

A-Z的临时解决方案是使用

CHR((ROW_NUMBER() OVER (PARTITION BY SOMECOLUMN ORDER BY 1))+64)

我创建了将数字转换为字符的函数:

CREATE OR REPLACE FUNCTION num_to_char(p_number IN NUMBER)
RETURN VARCHAR2
IS
  v_tmp    NUMBER;
  v_result VARCHAR2(4000) := '';
BEGIN
  v_result := CHR(MOD(p_number - 1, 26) + 65);
  IF p_number > 26 THEN
    v_result := num_to_char(TRUNC((p_number-1)/26)) || v_result;
  END IF;
  RETURN v_result;
END num_to_char;
/
您可以在选择中使用它:

SELECT num_to_char(ROW_NUMBER() OVER (PARTITION BY dummy ORDER BY 1))
FROM dual
CONNECT BY LEVEL < 3000
选择num_to_char(上面的行数()(按伪顺序按1划分))
来自双重
通过低于3000的标高连接

1-A,2-B,25-Y,26-Z,27-AA,28-AB,…,703-AAA,704-AAB,…

你想要27号的文本是什么?这就是我写“不稳定”的原因,但我现在不想没有任何基本想法,这个问题是另一个:)我不认为有oracle的解决方案可以解决这个问题,我想不出任何其他解决方案与您在问题中提供的解决方案不同。