2012-02-10 160 views
1

我想使用正則表達式分隔符在MySQL中分割字符串。有什麼辦法可以做到嗎?使用正則表達式分隔符在MySQL中分割字段值?

我發現這個博客文章,解釋如何實現一個簡單的分割字符串函數: mysql split string function

不過,我有兩個備選字符分割我的字符串,所以我想利用這個表達式:[ - , ]來分隔字符串。

下面是表我有,我想達到什麼樣的一個例子:

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

我想要做的就是找到每個「範圍」 - 場的最小值和最大值。 所以,我想獲得:

行1:2和5
行2:1和4
行3:2

任何提示將不勝感激!

+0

你能告訴我們一個你想做什麼的例子嗎? – Boris 2012-02-10 11:21:58

+0

好的,我添加了一個例子 - 這更詳細地顯示了我想用這個實現的目標。 – Lixus 2012-02-10 11:32:27

+0

我會去多一張表來存儲每個範圍,但不是一個好主意,可以將多個數據存儲在一個列中。不過,讓我想想你的情況。 – Boris 2012-02-10 11:35:41

回答

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 2012-02-10 12:30:41

+1

對最低限度使用GREATEST沒什麼用處,我更新了查詢,你只需要用'+ 0'來解析'range'作爲整數。 – adrien54 2012-02-10 12:58:02