2016.04.14
Ted Holt 著

SQLを使用してサブストリングを変更する

データベース表でストリング値の一部を変更しなければならない場合があります。SQL は、それを達成できる 3 つのメカニズムを備えています。こうしたメカニズムについて、またその使用方法を知っていますか?

まず、これを例証する目的で表が必要です。

技術情報01

メカニズム1:サブストリングと連結

サブストリング関数と連結を使用して、ストリングの新しい値を構築できます。この方法は、サブストリングが開始する位置を知っている場合に適しています。
例えば、ID が「XX」で始まるパーツがあります。「XX」を「AA」に変えましょう。

技術情報02

文字列「AA」を 3 番目の ID の次の文字に連結し、結果を ID 列 に割り当て戻しました。

その結果、以下のような表になります。

ID 説明
AA-101 20インチの Doodad (道具)
AA-105 2フィートの Doodad (道具)左側
AA-106 2フィートの Doodad (道具)右側
AA-118 12インチの Doodad (道具)
BA-101 5CM ウィジェット
BA-104 15Cm ウィジェット
BA-111 150cm ウィジェット
BA-145 15cm ウィジェットを使用
CT-201 ACME チェーン・ストレッチャー
CT-202 改造された ACME スカイ・フック

置き換えるストリングおよび置き換えストリングの長さは、同じである必要はありません。この例では、たまたま同じになりました。

メカニズム2:REPLACE関数

サブストリングが開始する位置を知らない場合、REPLACE 関数を使用して、あるストリングを別のストリングに置き換えることができます。粗野な言葉「doodad (道具)」をもっとエレガントで都会的な「doohickey (道具)」という言葉に置き換えましょう。

技術情報03

説明を見てみましょう。

ID 説明
AA-101 20インチの Doohickey (道具)
AA-105 2フィートの Doohickey (道具)左側
AA-106 2フィートの Doohickey (道具)右側
AA-118 12フィートの Doohickey (道具)
BA-101 5CM ウィジェット
BA-104 15Cm ウィジェット
BA-111 150cm ウィジェット
BA-145 15cm ウィジェットを使用
CT-201 ACME チェーン・ストレッチャー
CT-202 改造された ACME スカイ・フック

WHERE 節は必要ありませんでしたが、それを含めることで SQL が他の行を不用意に更新しないようにしました。

メカニズム3:正規表現

正規表現は不可解ですが、パワフルなワイルドカード処理です。詳しくはMichael Sansoterra's superb explanation をお読みください。

センチメートルで測定されているパーツを 2種類の方法で変えてみましょう。まず、センチメートルの省略形である cm が小文字であることを確認します。次に、cm と次のテキストの間にスペースを 1つだけ入れましょう。次のように更新されます。

技術情報04

では、表を見てみましょう。

ID 説明
AA-101 20インチの Doohickey (道具)
AA-105 2フィートの Doohickey (道具)左側
AA-106 2フィートの Doohickey (道具)右側
AA-118 12フィートの Doohickey (道具)
BA-101 5cm ウィジェット
BA-104 15cm ウィジェット
BA-111 150cm ウィジェット
BA-145 15cm ウィジェットを使用
CT-201 ACME チェーン・ストレッチャー
CT-202 改造された ACME スカイ・フック

WHERE 節は関数のような正規表現を使用して、数字の直後に大文字小文字に関係なく「CM」が続く行を選択します。もう少し詳しく見てみましょう。

技術情報05
  • [0-9] は任意の数字に一致します。
  • + 先行一致の 1 回以上の発生に一致することを意味します。これにより ACME パーツは更新用に選択されません。
  • [Cc] は、大文字小文字に関係なく文字 C に一致するようシステムに指示します。
  • [Mm] は、大文字小文字に関係なく文字 M に一致するようシステムに指示します。

正規表現置き換え関数は、ストリングの一部を変更します。

技術情報06
  • ( は最初のキャプチャー・グループの開始を示します。
  • [0-9] は任意の数字に一致します。
  • + 先行一致の 1 回以上の発生に一致することを意味します。
  • ) は最初のキャプチャー・グループの終了を示します。
  • [Cc] は、大文字小文字に関係なく文字 C に一致するようシステムに指示します。
  • [Mm] は、大文字小文字に関係なく文字 M に一致するようシステムに指示します。
  • ( は 2 番目のキャプチャー・グループの開始を示します。
  • ブランクは、ブランク文字の検索を指示します。
  • + 先行一致の 1 回以上の発生に一致することを意味します。
  • ) は 2 番目のキャプチャー・グループの終了を示します。

該当の一致が見つかると、第 3 パラメーターを使用して一致したテキストを置き換えます。

  • $1 は、CM という文字が先行する数字で構成されている、最初のキャプチャー・グループの内容を含めることを意味します。
  • 文字「cm」とブランク 1 つは、最初のキャプチャー・グループに続くストリングに置き換えられます。
  • 「Cm」に続いてブランクがある 2 番目のキャプチャー・グループは参照されないため、置き換えストリングには含まれません。

残りの説明は一致の部分ではないため、影響はありません。

いかがでしょうか。3 つの置き換えメカニズムです。ストリングの一部を置き換える必要があっても大丈夫です。

ページトップ

ボタン