Javaでは、Stringオブジェクトのsplitメソッドを使用して、指定した文字で文字列を文字列配列に分割できますが、MySQLは文字列分割関数を提供していません。今日、私たちはこのニーズに遭遇し、解決策を見つけました。みんなと共有する
シナリオ:組織化されたテーブル(ツリー構造を持つ種類)には、現在の部門のすべての親部門のIDを記録するツリーパスのフィールドがあります。たとえば、1-10-13は、組織の親組織が13、13の親組織は10で、10の親組織は1です。現在のユーザーの組織構造を照会します。たとえば、運輸省のローカルマシン(財務部門)の財務担当者は、ツリーパスを分割し、でクエリを実行する必要があります。
解決策1
1ストアドプロシージャを作成します
CREATE FUNCTION split(
x VARCHAR(255),
delim VARCHAR(12),
pos INT
)
RETURNS VARCHAR(255)
RETURN REPLACE(SUBSTRING(SUBSTRING_INDEX(x, delim, pos),
LENGTH(SUBSTRING_INDEX(x, delim, pos -1)) + 1),
delim, '');
関数分析:3つのパラメーターを渡します。最初のパラメーターは分割される文字、2番目のパラメーターは除算、3番目のパラメーターは分割された領域の数です。
2プロセスを呼び出してクエリを実行します
select split('1,2,3,4,5',',',help_topic_id)
from mysql.help_topic
where help_topic_id between 1 and length('1,2,3,4,5') -length(replace('1,2,3,4,5',',',''));
分析:これはmysqlに付属するテーブルmysql.help_topicです。そのhelp_topic_idは0から643まで連続しており、文字列が分割された後にhelp_topic_idの数を制御するだけで済みます。
解決策2
SELECT
SUBSTRING_INDEX(SUBSTRING_INDEX('7654,7698,7782,7788',',',help_topic_id+1),',',-1) AS num
FROM
mysql.help_topic
WHERE
help_topic_id < LENGTH('7654,7698,7782,7788')-LENGTH(REPLACE('7654,7698,7782,7788',',',''))+1
参照:https://www.cnblogs.com/gered/p/10797012.html