【SQL Server 2005】 文字列操作:美しいクエリが書きたい。
いつもお世話になっております。
早速ですが、文字列操作についてご指南いただきたく。
どうぞ宜しくお願い致します。
■やりたい事
とある列データの1,3,5文字目を「○」にUpdateしたい。
例:「おもちゃ屋さん」⇒「○も○ゃ○さん」
■既知の文字列操作関数
・Substring
・Isnull
・len
■データ長
varchar(50)
↑6文字以上ならなんでもいいです。
▼現在の解決方法▼
単純に、1,3,5文字目に当たる部分に「○」を。
2,4,6文字目をSubstringで抜き出して文字列結合しました。
----------------------------------------------
update SampleTable
set SampleColumn = '○' + substring(SampleColumn, 2, 1)
+ '○' + substring(SampleColumn, 4, 1)
+ '○' + substring(SampleColumn, 6, 50)
----------------------------------------------
この場合、文字数が6文字以上なら問題ないのですが、
6文字に満たないデータを更新しようとすると
SubstringのIndexエラーで結果がNullになってしまいます。
※substring(SampleColumn, 6, 50)
仕方がないのでUpdateを2回に分けて対応しました。
(1)5文字以上のデータ更新
(2)5文字に満たないデータ更新( 6文字目以降を取得する際にNullになってしまう)
--------------------解決クエリ--------------------
/* 5文字以上のデータ更新 (6文字目が無ければ空文字に置換) */
update SampleTable
set SampleColumn = '○' + substring( SampleColumn, 2, 1 )
+ '○' + substring( SampleColumn, 4, 1 )
+ '○' + isnull( substring( SampleColumn, 6, 50 ) )
where len(SampleColumn) >= 5
/* 5文字に満たないデータ更新 (5文字目が無ければ空文字に置換) */
update SampleTable
set DepartmentName = '○' + substring(SampleColumn, 2, 1)
+ '○' + isnull(substring(SampleColumn, 4, 1) ,'')
where len(DepartmentName) < 5
------------------------------------------------
※文字数の下限値は3文字としています。
ここで質問です。
なんかこう、文字のインデックスや他の関数を活用して一発で更新できるような書き方ができないものでしょうか?
上記の場合は、文字数が1文字(結果は「○」だけになる)だったり、
2文字の場合には対応できません。
漠然とした質問で申し訳ございませんが、文字操作に対する考え方自体を指南いただければ大変幸甚でございます。
何卒宜しくお願い致します。
お礼
ありがとうございます。 ちょっとByteについて初心者なもので、詳しく教えて頂けませんか? 例)文字列:String str = "123あいう"; 5文字取得したい場合、 str.subString(0,5) ・・・ "123あい" と取得されますが、 5バイト取得("123あ")の場合、どのようにコーディングすればよろしいのでしょうか?