我想知道这是否有可能在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
,但这听起来有点不稳定
A-Z的临时解决方案是使用
CHR((ROW_NUMBER() OVER (PARTITION BY SOMECOLUMN ORDER BY 1))+64)
答案 0 :(得分: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,......