goo blog サービス終了のお知らせ 

優柔不断なプログラマの日記

思いつきでポチポチ書きます

(ORACLE SQL)TRANSLATE関数とは

2006年10月16日 | プログラミング
今日も教えてgooを眺めているとデータベースカテゴリで目にとまった「TRANSLATE関数」。
なんだこれは。さっそくググルと。

 TRANSLATE( 検査文字列 , マッチ文字列 , 置換文字列 )

説明を読んでもなんか複雑。自分にわかるように書いてみると
1.検査文字列から1文字取り出し。
2.マッチ文字列の中に含まれるか?
 YES:置換文字列からマッチ位置に対応する桁位置の文字を取り出し、置換する。
 NO:検査文字列から取り出した文字そのまま。
3.検査文字列から次の文字を取り出し繰り返し。

(実用性なしの例)
SELECT TRANSLATE( 'あいうえお' , 'あうお' , 'アウ' ) FROM DUAL
結果→'アいウえ'

置換文字列がマッチ文字列より短く、マッチ文字列にマッチしても、
対応する置換文字列がない場合は''(空文字)になるみたい。


では、置換文字列が空文字ならマッチ文字列に含まれる文字を一発で消去できる?
SELECT TRANSLATE( 'あいうえお' , 'あうお' , '' ) FROM DUAL
結果→NULL

ダメです。こういう場合は、検査文字列に出てこない文字をダミー的に使うか、
消去する文字のいずれかに一度揃えてからREPLACEするのが一般的のようです。

SELECT REPLACE( TRANSLATE( 'あいうえお' , 'あうお' , '0' ) , '0' , '' ) FROM DUAL
SELECT REPLACE( TRANSLATE( 'あいうえお' , 'あうお' , 'あ' ) , 'あ' , '') FROM DUAL
結果→'いえ'

さらに、これを二重にして、指定文字を消去するではなく、指定文字のみを残す。
SELECT REPLACE( TRANSLATE( 'あいうえお'
            , REPLACE( TRANSLATE( 'あいうえお' , 'あうお' , '0' ) , '0' , '' )
            , '0')
       , '0', '' )
FROM DUAL
結果→'あうお'

まあ何かに使えそうかもしれないけど。
人の作ったソースを解析中にこんなSQLを発見したらグッタリしそう。


最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。