2012-02-10 10 views
1

正規表現の区切り文字を使用してMySQLで文字列を分割したいとします。これを行う方法はありますか?正規表現の区切り文字を使用してMySQLでフィールド値を分割しますか?

私は、単純な分割文字列関数を実装する方法を説明し、このブログの記事を見つけました: mysql split string function

はしかし、私は2つの代替文字で私の文字列を分割する必要があるので、私は、この正規表現を使用したい:[を - 、 ]を押して文字列を区切ります。ここで

は私が持っているテーブルと私は何を達成したいの例です。

| id | range | 
|----|-------| 
| 1 | 2,3,5 | 
| 2 | 1-4 | 
| 3 | 2  | 

私は何をしたいことは、それぞれ「範囲」 - フィールドの最小値と最大値を見つけることです。 だから、私が取得したいと思います:

行1:2と5
行2:1と4
行3:2

を任意のヒントをいただければ幸いです!

+0

あなたがしたいことの例を教えてください。 – Boris

+0

OK、私は例を加えました - これは私がこれで達成したいものをより詳細に示しています。 – Lixus

+0

私は、1つの列に複数のデータを格納するのは良い考えではなく、各範囲を格納するテーブルを1つ増やしていきます。しかし、あなたの事件について考えさせてください。 – Boris

答えて

2

テーブル名の名前がdataで、rangeの値が最小値から最大値にソートされているとします。あなたが本当にボリスは、あなたができれば、それはきれいになり、それを示唆したような範囲のための新しいテーブルを作成する方法について考えなければならないしかし

SELECT id, 
(0 + data.range) AS min, 
GREATEST(
    0 + SUBSTRING_INDEX(data.range, ',', -1), 
    0 + SUBSTRING_INDEX(data.range, '-', -1) 
) AS max 
FROM `data` 

+0

ありがとう、これは動作しています!私はそれを完全に理解していませんが。 GREATESTを使用してSUBSTRING_INDEX関数から得られる結果のどちらかを選択する理由を指摘できますか? – Lixus

+1

最小値でGREATESTを使用するのは無駄です。私はクエリを更新しましたが、 '+ 0'を使用して '範囲'を解析する必要があります。 – adrien54

関連する問題