sql >> データベース >  >> RDS >> Oracle

SQLを使用して単語ごとに文字列を逆にする

    独自の関数の定義を回避するためのXMLベースのバージョン。 listagg()には11gが必要です :

    select listagg(word, ' ') within group (order by rn desc) as reversed
    from (
      select word, rownum as rn
      from xmltable('for $i in ora:tokenize($STR, " ") return $i'
        passing 'Hello World! I Love StackOverflow' as str
        columns word varchar2(4000) path '.'
      )
    );
    
    REVERSED                               
    ----------------------------------------
    StackOverflow Love I World! Hello        
    

    XMLTable() トークン化を行い、行番号を割り当てます:

    select rownum as rn, word
    from xmltable('for $i in ora:tokenize($STR, " ") return $i'
      passing 'Hello World! I Love StackOverflow' as str
      columns word varchar2(4000) path '.'
    );
    
            RN WORD               
    ---------- --------------------
             1 Hello                
             2 World!               
             3 I                    
             4 Love                 
             5 StackOverflow        
    

    listagg() 次に、逆の順序でつなぎ合わせます。



    1. 主キーを変更する

    2. SQL Server(T-SQL)のパーティション関数のパラメータータイプを確認します

    3. 最後に挿入された行から値を取得するにはどうすればよいですか?

    4. MariaDBでのCONVERT()のしくみ