ホームページ > データベース > mysql チュートリアル > 共通テーブル式を使用して SQLite でカンマ区切り値を簡単に分割するにはどうすればよいですか?

共通テーブル式を使用して SQLite でカンマ区切り値を簡単に分割するにはどうすればよいですか?

DDD
リリース: 2025-01-03 00:11:42
オリジナル
594 人が閲覧しました

How Can I Easily Split Comma-Separated Values in SQLite Using Common Table Expressions?

SQLite でカンマ区切り値を分割する簡単なアプローチの作成

概要

カンマ区切り値からの個々の値の抽出文字列はデータ分析における一般的な要件です。 SQLite には、SQL の SubString() 関数に直接相当する関数がないため、このタスクはやや困難になります。ただし、Common Table Expressions (CTE) を使用すると、効率的で直感的なソリューションを作成できます。

解決策: CTE の使用

CTE を使用すると、次のことが可能になります。一時的な結果セットを定義して名前を付けます。 CTE 内で再帰を利用することで、カンマ区切りの文字列を繰り返し解析し、各値を一度に 1 つずつ抽出できます。

この場合の CTE 宣言は次のようになります。

WITH split(word, csv) AS (
  -- 'initial query' (see SQLite docs linked above)
  SELECT 
    '', 
    'Auto,A,1234444'||','
  
  -- 'recursive query'
  UNION ALL SELECT
    substr(csv, 0, instr(csv, ',')), 
    substr(csv, instr(csv, ',') + 1)
  FROM split
  WHERE csv != ''
)
ログイン後にコピー

「初期クエリ」では、CTE の再帰部分の開始点を作成します。 「word」に空の文字列を指定し、CSV の終わりを示すためにカンマ区切りの文字列と追加のカンマを追加します。

「再帰クエリ」で魔法が起こります。 instr() 関数を使用して、「csv」フィールド内の最初のカンマの位置を検索します。次に、substr() を使用して「csv」フィールドを「word」と残りの「csv」部分に分割します。

再帰を使用して、カンマがなくなるまで残りの「csv」部分の分割を続けます。 、すべてのカンマ区切り値を効果的に抽出します。

分割の取得値

CTE が分割値を定義したら、単純なクエリを使用して分割値を取得できます。

SELECT word FROM split 
WHERE word!='';
ログイン後にコピー

WHERE 句は、初期値と値を表す空の文字列を除外します。端子値。

出力と利点

クエリの出力は次のとおりです。

Auto
A
1234444
ログイン後にコピー

このアプローチにはいくつかの利点があります。

  • 再帰的 CTE を使用します。は、分割の反復的な性質を処理するエレガントで効率的な方法です。
  • 出力は理解しやすく、
  • より複雑でエラーが発生しやすい Replace() 関数や Trim() 関数を使用する必要はありません。

以上が共通テーブル式を使用して SQLite でカンマ区切り値を簡単に分割するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート