1

数値を含む降順で文字列をそれぞれの文字に置き換える正規表現が必要です。

  • 英数字の文字列を降順の文字列に置き換えます
  • 特殊文字が sting に見つかった場合はそのままにしておきます

つまり:

ABCDEFGHIJKLMNOPQRSTU VWXYZ
ZYXWVUTSRQPONMLKJIHGF EDCBA

0 1 2 3 4 5 6 7 8 9
9 8 7 6 5 4 3 2 1 0

いくつかの例:

1) ABC*1230 -> ZYX*8739

2) ハローワールド! -> スヴォル・ドゥリオウ!

3) 善悪 -> Tllw & Yzw

4

2 に答える 2

13

これにはOracleTRANSLATE関数を使用します。

TRANSLATE(myValue,
  'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789',
  'ZYXWVUTSRQPONMLKJIHGFEDCBA9876543210')
于 2013-06-13T14:16:44.853 に答える
3

ここでは、REGEXP を使用しています。

SELECT  LISTAGG(DECODE(o_str_level,NULL,srch_l.rs,o_str_level)) WITHIN GROUP (ORDER BY srch_l.ri) AS the_result
FROM
(
        SELECT  REGEXP_SUBSTR(t_str, '.', 1, LEVEL) rs
        ,       REGEXP_INSTR (t_str, '.', 1, LEVEL) ri
        FROM    
        (
                SELECT  'ABCDEF TUVWXYZ' AS t_str FROM DUAL
        ) test_str
        CONNECT BY LEVEL <= LENGTH(t_str)
) srch_l
LEFT JOIN
(
        SELECT  REGEXP_SUBSTR(r_str, '\w', 1, LEVEL) AS r_str_level
        ,       REGEXP_SUBSTR(o_str, '\w', 1, LEVEL) AS o_str_level
        FROM
        (
                SELECT  'ABCDEFGHIJKLMNOPQRSTUVWXYZ' r_str, 'ZYXWVUTSRQPONMLKJIHGFEDCBA' o_str FROM DUAL
        )
        CONNECT BY LEVEL <= 26
) apt
ON      srch_l.rs = apt.r_str_level;

-- Result:
-- ZYXWVU GFEDCBA

TRANSLATE よりも簡単ですか?ほとんど...

于 2013-06-13T15:28:13.800 に答える