SQL에서 Excel의 셀 위치와 같은 값을 정렬하는 방법

11309 단어 오라클SQL정규식
  • 환경
  • SQL*Plus: Release 12.2.0.1.0 Production
  • Oracle Database 12c Standard Edition Release 12.2.0.1.0 - 64bit Production


  • 하고 싶은 일



    Excel의 셀 위치 같은 값이란 A1 라든지 BA25 같은 사람입니다.

    "A >...> Z > AA""1 >...> 9 > 10 > 11"으로 정렬하고 싶습니다.
    「A > AA > B > BB」라든가 「1 > 11 > 2 > 21」같이 늘어놓고 싶지 않습니다.

    이런 식으로 하고 싶지 않아
    SQL> select * from cell_info order by cell;
    
    CELL         CONTENTS
    ------------ ------------------------------------
    A1           peach
    A11          mandarin   --> 「1」の次は「11」じゃなくて「2」がいい
    A2           pumpkin
    A25          plum
    AA1          cherry     --> 「A」の次は「AA」じゃなくて「B」がいい
    AA11         pomegranate
    AA2          loquat
    AA25         kumquat
    AC1          turnip
    AC11         banana
    AC2          grape
    AC25         melon
    B1           apple
    B11          orange
    B2           persimmon
    B25          strawberry
    
    16行が選択されました。
    

    Excel의 셀 위치와 같은 값을 정렬하는 방법



    결론
    -- 列を第1キーにする場合
    SQL> select * from cell_info order by length(regexp_substr(cell,'[A-Z]+')),regexp_substr(cell,'[A-Z]+'),to_number(regexp_substr(cell,'[0-9]+'));
    
    CELL         CONTENTS
    ------------ ------------------------------------
    A1           peach
    A2           pumpkin
    A11          mandarin
    A25          plum
    B1           apple
    B2           persimmon
    B11          orange
    B25          strawberry
    AA1          cherry
    AA2          loquat
    AA11         pomegranate
    AA25         kumquat
    AC1          turnip
    AC2          grape
    AC11         banana
    AC25         melon
    
    16行が選択されました。
    
    -- 行を第1キーにする場合
    SQL> select * from cell_info order by to_number(regexp_substr(cell,'[0-9]+')),length(regexp_substr(cell,'[A-Z]+')),regexp_substr(cell,'[A-Z]+');
    
    CELL         CONTENTS
    ------------ ------------------------------------
    A1           peach
    B1           apple
    AA1          cherry
    AC1          turnip
    A2           pumpkin
    B2           persimmon
    AA2          loquat
    AC2          grape
    A11          mandarin
    B11          orange
    AA11         pomegranate
    AC11         banana
    A25          plum
    B25          strawberry
    AA25         kumquat
    AC25         melon
    
    16行が選択されました。
    
    

    방법 : 셀 위치의 문자열을 분해하고 정렬했습니다.


    regexp_substr 함수에서 문자열을 분해하여 정렬 키로 만들었습니다.
    행 번호는 수치화하지 않으면 문자열로서 「1 > 11 > 2 > 21」같이 소트되어 버립니다.
    SQL> select cell,length(regexp_substr(cell,'[A-Z]+')) as 列番号の文字数,regexp_substr(cell,'[A-Z]+') as 列番号の部分,to_number(regexp_substr(cell,'[0-9]+')) as 行番号の部分 from cell_info;
    
    CELL         列番号の文字数 列番号の部分                                     行番号の部分
    ------------ -------------- ------------------------------------------------ ------------
    A1                        1 A                                                           1
    A11                       1 A                                                          11
    A2                        1 A                                                           2
    A25                       1 A                                                          25
    AA1                       2 AA                                                          1
    AA11                      2 AA                                                         11
    AA2                       2 AA                                                          2
    AA25                      2 AA                                                         25
    AC1                       2 AC                                                          1
    AC11                      2 AC                                                         11
    AC2                       2 AC                                                          2
    AC25                      2 AC                                                         25
    B1                        1 B                                                           1
    B11                       1 B                                                          11
    B2                        1 B                                                           2
    B25                       1 B                                                          25
    
    16行が選択されました。
    
    

    좋은 웹페이지 즐겨찾기