2015-12-09 60 views

回答

3

這似乎是,如果你想在純SQL做的工作:

SELECT CHR(divided+65)||CHR(remainder+65) 
    FROM (
    SELECT 0 AS initial_val, 
     0 AS divided, 
     0 AS remainder 
    FROM dual 
UNION 
SELECT LEVEL AS initial_val, 
     TRUNC(LEVEL/26) AS divided, 
     MOD(LEVEL,26) AS remainder 
    FROM dual 
CONNECT BY LEVEL <= 675) 
ORDER BY initial_val 

它建立的676行的列表(必須使用聯合的第一條記錄在分層查詢從1開始,而不是0 )。

676是26 x 26,因此它會將該數字除以得到主要字母的數字(轉換爲主要文字SELECT中的一個字母),並將該部分的其餘部分用於結尾的字母。

然後,我添加65來獲取數字到字母表字母的ASCII區域,你去了。

希望它有幫助;

2

使用SQL MODEL子句生成行名單:

SELECT s 
FROM (select chr(level + 65 - 1) pos1 from dual connect by level <= 26) 
MODEL 
    DIMENSION BY (pos1 AS x, 'A' as y) 
    MEASURES ('--' AS s) 
    RULES UPSERT ALL ITERATE (26) 
(
s[any, chr(iteration_number + 65)] = (CV(x) || CV(y)) 
) 
ORDER BY s; 

採樣運行:

09/12/2015 19:55:26:SQL>  SELECT s 
    2  FROM (select chr(level + 65 - 1) pos1 from dual connect by level <= 26) 
    3  MODEL 
    4  DIMENSION BY (pos1 AS x, 'A' as y) 
    5  MEASURES ('--' AS s) 
    6  RULES UPSERT ALL ITERATE (26) 
    7  (
    8  s[any, chr(iteration_number + 65)] = (CV(x) || CV(y)) 
    9  ) 
10  ORDER BY s; 

S 
-- 
AA 
AB 
AC 
AD 
AE 
etc ... 

然後我們可以運行LISTAGG簡單聚集,如:

WITH t AS (
SELECT s 
FROM (select chr(level + 65 - 1) pos1 from dual connect by level <= 26) 
MODEL 
    DIMENSION BY (pos1 AS x, 'A' as y) 
    MEASURES ('--' AS s) 
    RULES UPSERT ALL ITERATE (26) 
(
s[any, chr(iteration_number + 65)] = (CV(x) || CV(y)) 
) 
ORDER BY s) 
-- data generated, now aggregate 
SELECT listagg(s, ', ') WITHIN GROUP (ORDER BY s) aggreg_list 
    FROM t; 

結果:

09/12/2015 19:52:59:SQL> WITH t AS (
    2 SELECT s 
    3 FROM (select chr(level + 65 - 1) pos1 from dual connect by level <= 26) 
    4 MODEL 
    5 DIMENSION BY (pos1 AS x, 'A' as y) 
    6 MEASURES ('--' AS s) 
    7 RULES UPSERT ALL ITERATE (26) 
    8 (
    9 s[any, chr(iteration_number + 65)] = (CV(x) || CV(y)) 
10 ) 
11 ORDER BY s) 
12 -- data generated, now aggregate 
13 SELECT listagg(s, ', ') WITHIN GROUP (ORDER BY s) aggreg_list 
14 FROM t; 

AGGREG_LIST 
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
AA, AB, AC, AD, AE, AF, AG, AH, AI, AJ, AK, AL, AM, AN, AO, AP, AQ, AR, AS, AT, AU, AV, AW, AX, AY, AZ, BA, BB, BC, BD, BE, BF, BG, BH, BI, BJ, BK, BL, BM, BN, BO, BP, BQ, BR, BS, BT, BU, BV, BW, BX, BY, BZ, CA, CB, CC, CD, CE, CF, CG, CH, CI, CJ, CK, CL, CM, CN, CO, CP, CQ, CR, CS, CT, CU, CV, CW, CX, CY, CZ, DA, DB, DC, DD, DE, DF, DG, DH, DI, DJ, DK, DL, DM, DN, DO, DP, DQ, DR, DS, DT, DU, DV, DW, DX, DY, DZ, EA, EB, EC, ED, EE, EF, EG, EH, EI, EJ, EK, EL, EM, EN, EO, EP, EQ, ER, ES, ET, EU, 
EV, EW, EX, EY, EZ, FA, FB, FC, FD, FE, FF, FG, FH, FI, FJ, FK, FL, FM, FN, FO, FP, FQ, FR, FS, FT, FU, FV, FW, FX, FY, FZ, GA, GB, GC, GD, GE, GF, GG, GH, GI, GJ, GK, GL, GM, GN, GO, GP, GQ, GR, GS, GT, GU, GV, GW, GX, GY, GZ, HA, HB, HC, HD, HE, HF, HG, HH, HI, HJ, HK, HL, HM, HN, HO, HP, HQ, HR, HS, HT, HU, HV, HW, HX, HY, HZ, IA, IB, IC, ID, IE, IF, IG, IH, II, IJ, IK, IL, IM, IN, IO, IP, IQ, IR, IS, IT, IU, IV, IW, IX, IY, IZ, JA, JB, JC, JD, JE, JF, JG, JH, JI, JJ, JK, JL, JM, JN, JO, JP, 
JQ, JR, JS, JT, JU, JV, JW, JX, JY, JZ, KA, KB, KC, KD, KE, KF, KG, KH, KI, KJ, KK, KL, KM, KN, KO, KP, KQ, KR, KS, KT, KU, KV, KW, KX, KY, KZ, LA, LB, LC, LD, LE, LF, LG, LH, LI, LJ, LK, LL, LM, LN, LO, LP, LQ, LR, LS, LT, LU, LV, LW, LX, LY, LZ, MA, MB, MC, MD, ME, MF, MG, MH, MI, MJ, MK, ML, MM, MN, MO, MP, MQ, MR, MS, MT, MU, MV, MW, MX, MY, MZ, NA, NB, NC, ND, NE, NF, NG, NH, NI, NJ, NK, NL, NM, NN, NO, NP, NQ, NR, NS, NT, NU, NV, NW, NX, NY, NZ, OA, OB, OC, OD, OE, OF, OG, OH, OI, OJ, OK, 
OL, OM, ON, OO, OP, OQ, OR, OS, OT, OU, OV, OW, OX, OY, OZ, PA, PB, PC, PD, PE, PF, PG, PH, PI, PJ, PK, PL, PM, PN, PO, PP, PQ, PR, PS, PT, PU, PV, PW, PX, PY, PZ, QA, QB, QC, QD, QE, QF, QG, QH, QI, QJ, QK, QL, QM, QN, QO, QP, QQ, QR, QS, QT, QU, QV, QW, QX, QY, QZ, RA, RB, RC, RD, RE, RF, RG, RH, RI, RJ, RK, RL, RM, RN, RO, RP, RQ, RR, RS, RT, RU, RV, RW, RX, RY, RZ, SA, SB, SC, SD, SE, SF, SG, SH, SI, SJ, SK, SL, SM, SN, SO, SP, SQ, SR, SS, ST, SU, SV, SW, SX, SY, SZ, TA, TB, TC, TD, TE, TF, 
TG, TH, TI, TJ, TK, TL, TM, TN, TO, TP, TQ, TR, TS, TT, TU, TV, TW, TX, TY, TZ, UA, UB, UC, UD, UE, UF, UG, UH, UI, UJ, UK, UL, UM, UN, UO, UP, UQ, UR, US, UT, UU, UV, UW, UX, UY, UZ, VA, VB, VC, VD, VE, VF, VG, VH, VI, VJ, VK, VL, VM, VN, VO, VP, VQ, VR, VS, VT, VU, VV, VW, VX, VY, VZ, WA, WB, WC, WD, WE, WF, WG, WH, WI, WJ, WK, WL, WM, WN, WO, WP, WQ, WR, WS, WT, WU, WV, WW, WX, WY, WZ, XA, XB, XC, XD, XE, XF, XG, XH, XI, XJ, XK, XL, XM, XN, XO, XP, XQ, XR, XS, XT, XU, XV, XW, XX, XY, XZ, YA, 
YB, YC, YD, YE, YF, YG, YH, YI, YJ, YK, YL, YM, YN, YO, YP, YQ, YR, YS, YT, YU, YV, YW, YX, YY, YZ, ZA, ZB, ZC, ZD, ZE, ZF, ZG, ZH, ZI, ZJ, ZK, ZL, ZM, ZN, ZO, ZP, ZQ, ZR, ZS, ZT, ZU, ZV, ZW, ZX, ZY, ZZ 
1

有了這一個可以生成任何長度的序列:

SQL> with input as (
    2   select 0 as start_position, 3 as strings_length, 35 as sequence_elements, ascii('Z')-ascii('A')+1 as base, ascii('A') as start_val 
    3   from dual 
    4 ) 
    5 select sequence_position, listagg(character,'') within group(order by char_level desc) as sequence_value 
    6 from (
    7   select inp_sequence.*, format.*, chr(start_val + mod(trunc(sequence_position/power(base, char_level)),base)) as character 
    8   from (
    9     select i.*, start_position + rownum-1 as sequence_position 
10     from input i 
11     connect by rownum <= sequence_elements 
12   ) inp_sequence 
13    cross join (
14     select rownum-1 as char_level 
15     from input 
16     connect by rownum <= strings_length 
17   ) format 
18 ) 
19 group by sequence_position 
20/

SEQUENCE_POSITION SEQUENCE_VALUE 
----------------- -------------------------------------------------------------------------------- 
       0 AAA 
       1 AAB 
       2 AAC 
       3 AAD 
       4 AAE 
       5 AAF 
       6 AAG 
       7 AAH 
       8 AAI 
       9 AAJ 
       10 AAK 
       11 AAL 
       12 AAM 
       13 AAN 
       14 AAO 
       15 AAP 
       16 AAQ 
       17 AAR 
       18 AAS 
       19 AAT 
       20 AAU 
       21 AAV 
       22 AAW 
       23 AAX 
       24 AAY 
       25 AAZ 
       26 ABA 
       27 ABB 
       28 ABC 
       29 ABD 
       30 ABE 
       31 ABF 
       32 ABG 
       33 ABH 
       34 ABI 

35 rows selected 

SQL> 

這裏:

  • START_POSITION指示要開始(0表示AA..A)的元件
  • strings_length指示序列中字符串的長度
  • sequence_elements指示元件,以生成的數目(以下START_POSITION