PLSQLで全角半角文字が入り乱れているデータの泣き別れ対応

全角文字と半角文字が入り乱れている文字列を分割し、2つの変数に格納する際に、泣き別れが発生しないように対応を変えて分割をしたいと考えています。

前提として、自分の環境だと全角文字は1文字に対して3バイト扱いとなります。
下記のコードでは文字列'あああいいいaa'(全角文字6文字×3 = 18 + 半角2文字で合計20バイト)の文字を最大10バイトの変数2つに分割しようとしています。
これだと、4文字目の「い」が9~11バイトにかかっており、10バイトずつ分割した場合に泣き別れが発生して、
str1の最後に半角スペース1つ、str2の最初に半角スペース2つという形で「い」が置き換えられてしまいます。

PLSQL

1DECLARE2str0 VARCHAR2(20);3str1 VARCHAR2(10);4str2 VARCHAR2(10);5BEGIN6 str0 := 'あああいいいaa';7 8 IF LENGTHB(str0) > 10 THEN9 str1 := str0;10 ELSE11 str1 := SUBSTRB(str0,1,10);12 str2 := SUBSTRB(str0,11);13 END;14 15 DBMS_OUTPUT.PUT_LINE(str1);16 DBMS_OUTPUT.PUT_LINE(str2);17END;

求める結果としては、上記の場合だと
「あああ」までをstr1に格納し、
「いいいa」までをstr2に格納し、入りきらない最後の「a」は格納しないといった処理を行いたいです。

コメントを投稿

0 コメント