TECH BLOG

MENU

オンプレクラウド

Dr.Sum

Dr.Sum

Dr.Sumには文字列データを加工するための関数がたくさん用意されています。例えば「2024/12/31」の文字列データを「31/12/2024」に入れ替える場合、方法はいくつかありますが、次のように書くことができます。

SELECT DAY(TO_DATE('2024/12/31', 'YYYY/MM/DD')) 
    || '/' || MONTH(TO_DATE('2024/12/31', 'YYYY/MM/DD')) 
    || '/' || YEAR(TO_DATE('2024/12/31', 'YYYY/MM/DD'));

上記の例ではいくつか関数を組み合わせていますが、正規表現関数を使うことでより簡単に加工を行うことができます。本記事では、複雑なパターンに対してもシンプルな記述で加工ができる正規表現関数について紹介します!

正規表現の使い方については、検索するとたくさん記事が出てきます。使いこなせるようになるとより加工の幅が広がります。電話番号にマッチする正規表現の例なども検索で出てきますし、今は生成AIに聞いてみるのも手かもしれませんね。

正規表現関数を使うとどれくらい楽になる?

冒頭の例については次章で触れるので詳細は省きますが、「2024/12/31」を「31/12/2024」に入れ替える場合は下記のように書けます。

-- 実行結果:'31/12/2024'
SELECT REGEXP_REPLACE('2024/12/31', '(\d{4})/(\d{1,2})/(\d{1,2})', '\3/\2/\1');

こちらの’\3/\2/\1’の指定は「後方参照」と呼ばれる便利な手法です。次章の「REGEXP_REPLACE」節で詳しく紹介しているのでぜひご一読ください!

別の例としてDr.SumのマニュアルのURLからドメイン部分(‘cs.wingarc.com’)を抽出することを考えてみます。

方法はいくつかありますが、スラッシュ区切りであることに着目して、INSTR関数とSUBSTR関数を使ってみます。案の定かなり長い記述になってしまいましたね。

-- 実行結果:cs.wingarc.com
SELECT SUBSTRING('https://cs.wingarc.com/manual/drsum/5.7/index.html'
    ,INSTR('https://cs.wingarc.com/manual/drsum/5.7/index.html','/',1,2) + 1
    ,INSTR('https://cs.wingarc.com/manual/drsum/5.7/index.html', '/', 1, 3)
        - INSTR('https://cs.wingarc.com/manual/drsum/5.7/index.html', '/', 1, 2) - 1
);

正規表現関数を使うと次のようにシンプルに書けます。

-- 実行結果:cs.wingarc.com
SELECT REGEXP_REPLACE('https://cs.wingarc.com/manual/drsum/5.7/index.html','^https?://([^/]+).*','\1');

 

正規表現関数の使いどころと便利なポイント

Ver. 5.7.00.0030時点では以下の5つの正規表現関数が使えます。

 

【Dr.Sumマニュアル】文字列操作関数

このうち、いくつかピックアップして、使いどころと便利なポイントについて説明していきます。

REGEXP_COUNT

REGEXP_COUNTは、指定した文字列データに対して、正規表現にマッチする回数を取得する関数です。

例えば、英語の文章から単語の数を数える場合に利用できます。

-- 実行結果:12
SELECT REGEXP_COUNT("This is sample sentense in English to show how to use REGEXP_COUNT.", "\b[a-zA-Z\'-]+");

正規表現を使わず、シンプルに特定文字の数を数える場合にもREGEXP_COUNTを使うことができます。SNSの投稿文中にあるハッシュタグ「#」の数を数える例です。

-- 実行結果:12
SELECT REGEXP_COUNT('こんにちは、みなさん!今日は、AI(人工知能)を活用した最新の自動化ツールを紹介します。このツールは、業務の効率化を支援するために、機械学習アルゴリズムを使用してタスクの自動化を行います。特に以下の分野で大きな効果を発揮します:
・データ入力と整理
・カスタマーサポートの効率化
・プロジェクト管理の自動化
さらに、このツールは直感的なインターフェースを持ち、わずか数クリックで設定を完了できます。特に中小企業にとって、業務の最適化が大きな助けになるでしょう。使い方はシンプルで、複雑なプログラミングスキルは不要です。
詳細はこちらのリンクでチェック!【リンク】
#AI #人工知能 #自動化 #機械学習 #効率化 
#業務改善 #プロジェクト管理
#テクノロジー #ITソリューション #中小企業 
#カスタマーサポート #データ管理', "#");

REGEXP_LIKE

REGEXP_LIKEは、指定した文字列データに対して、正規表現にマッチする箇所があるか否かを判定する関数です。この関数は文字列の加工というよりは、WHERE句で抽出条件として利用します。

通常、複数条件や前方一致などを行う場合は「WHERE カラム名 IN 条件」と記述できますが、正規表現を使うことで、金額など数値データに対してn桁のものを抽出、文字型のデータに対して範囲検索などより自由度高く指定できる点が魅力です。

-- 100 ~ 100000 のうち、4桁のデータのみ抽出
SELECT N AS 数値データ FROM GENERATE_SERIES ( 100, 100000 ) N WHERE REGEXP_LIKE(N,'^[0-9]{4}$') = 1;

コード情報など文字型ではあるが数値の連番として扱われるものを範囲検索するときは、都度数値に変換したりといった手間が省けて便利です。

-- 社員コードの00010~00099までを抽出
SELECT 社員コード FROM 社員マスタ WHERE REGEXP_LIKE(社員コード, '000[1-9][0-9]') = 1;

REGEXP_REPLACEと後方参照

REGEXP_REPLACEは、指定した文字列データに対して、正規表現にマッチした箇所を別の文字へ変換する関数です。

冒頭の加工について考えてみます。「2024/12/31」のように年月日が「yyyy/mm/dd」のフォーマットになっているものを「dd/mm/yyyy」など任意の順序に並び替える場合にREGEXP_REPLACEが便利です。

-- 実行結果:'31/12/2024'
SELECT REGEXP_REPLACE('2024/12/31', '(\d{4})/(\d{1,2})/(\d{1,2})', '\3/\2/\1');

第二引数と第三引数に焦点をあてつつ、グループ化による後方参照について併せて紹介します。

 

前章で紹介した、Dr.SumのマニュアルのURLからドメインを取得するケースでもこの後方参照を使っています。

-- 実行結果:cs.wingarc.com
SELECT REGEXP_REPLACE('https://cs.wingarc.com/manual/drsum/5.7/index.html','^https?://([^/]+).*','\1');

‘http(s)://’以降の文字列に対して’/’区切りでグループ化し、その一番目のグループを指定することでドメインを取得しています。

さいごに

正規表現関数を使うことで、複雑な文字列パターンに対しても柔軟に加工・抽出が可能です。生データのままでは扱いづらい時、正規表現関数が使えないか検討してみてくださいね。

 

この記事にリアクションしてみませんか?

What do you think of this post?
  • 分かりやすい (1)
  • 問題が解決した (0)
評価いただいてありがとうございます!

宇根 昌和

MotionBoard Dr.Sum
プロフィールへ >

新卒でウイングアーク1stへ入社、プリセールス活動後、Dr.Sumの開発を行っています。Pythonをベースに様々なツールからデータをDr.Sumへ集約しMotionBoardで可視化する仕組みを作ったり、Web APIを使ったデータ蓄積ノウハウをテーマにイベント登壇したりしています。Dr.Sum及びMotionBoardを中心とした役立つ情報を発信していきます!

Related article

Related article関連記事

Pick up

Pick upおすすめ記事

invoiceAgent【「業務を変える動画たち」シリーズ】記事まとめ

公開:2025.01.16
更新:2025.01.16

分かりやすい

0

解決した

0
  • 業務を変えるシリーズ

invoiceAgent

【脱Excel】MotionBoardの入力機能で業務アプリをつくる

公開:2024.08.05
更新:2024.08.05

分かりやすい

2

解決した

0
  • データ入力
  • デザイン
  • コンテナ

MotionBoard

【まとめ】SVF Cloud帳票をinvoiceAgentに連携する方法

公開:2024.04.18
更新:2024.08.07

分かりやすい

2

解決した

2
  • 電帳法
  • 文書定義
  • 処理定義
  • 帳票作成・出力
  • システム連携

SVF

Ranking

Rankingランキング

1

Excelのデータを加工したい。~変換(横持ち⇔縦持ち)について~

公開:2021.01.19
更新:2024.05.08

分かりやすい

7

解決した

1
  • データ取り込み
  • データ加工

Dr.Sum

2

【あの頃に戻りたい】バックアップから任意のテーブルだけを戻す方法

公開:2023.11.07
更新:2023.11.20

分かりやすい

1

解決した

0
  • 設定

Dr.Sum

3

【DELETE-INSERT】特定期間のデータのみ洗い替えたい!【手動編】

公開:2024.01.10
更新:2024.05.08

分かりやすい

0

解決した

0
  • データ取り込み
  • SQL

Dr.Sum

Info

Information

ウイングアーク1stからのお知らせ