2006.05.18

文字列の左から指定バイトの文字を取り出す

知っている人は知っていると思いますが、自分にとっては新発見だったので紹介します。
今回、T-SQLで文字列の左から指定バイトを取り出す処理が必要になりました。
この手の処理で問題となるのは半角/全角混在の場合で、指定されたバイト位置にちょうど全角がくると、最後の文字が化けてしまいます。
他の言語では自前で関数を用意していて、ロジックはたいてい「1文字づつループして、そのバイト数を取り、指定バイト以内で返却文字列へ結合していく」といった感じになっています。
さて、それをT-SQLで実現しようと思い、「lenとsubstringで1文字づつループしてdatalengthでバイトチェックかな」などと思考していましたが、ふと「convertしたらどうなるんだろう」と思いやってみると、実はこれだけでできてしまいました。

select convert(varchar(1),'ああ') -- ⇒ ''
select convert(varchar(2),'ああ') -- ⇒ 'あ'
select convert(varchar(3),'ああ') -- ⇒ 'あ'
select convert(varchar(4),'ああ') -- ⇒ 'ああ'

T-SQLは文字列処理に向いていないと思っていたのですが、ちょっと見直しました。

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

photo
admin