1

我想知道这是否可以在 oracle 中将行号(ROW_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的,但这听起来有点不稳定

AZ的临时解决方案是使用

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

1 回答 1

2

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

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

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

于 2015-04-23T07:15:50.377 回答