-->

枚举甲骨文按字母顺序排列的行(Enumerate rows alphabetized in Orac

2019-10-22 18:51发布

我不知道这是Oracle可能取代行号(我们可以使用ROW_NUMBER()例如得到一个数字)到alfabetical编号

比方说,要达到这样的

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)

Answer 1:

我创建函数,数转换为字符:

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,...



文章来源: Enumerate rows alphabetized in Oracle