概要
カンマ区切り値からの個々の値の抽出文字列はデータ分析における一般的な要件です。 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
このアプローチにはいくつかの利点があります。
以上が共通テーブル式を使用して SQLite でカンマ区切り値を簡単に分割するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。