2017-06-03 115 views
1

我需要一個正則表達式查詢select * from table where field regex ***爲了使用相匹配的記錄而已,如果我的「伽馬」「阿爾法」是,至少在1同樣;between;MySQL查詢正則表達式來環

我有一個文本申請表所示:

... ;Model Alpha Beta Gamma; Model Hitch Gamma Alpha; Model Pi Alpha Gamma; ... 

或(我可以改變結構,如果是比較容易)

.... 
;Model Alpha Beta Gamma; 
;Model Hitch Pi Alpha; 
;Model Pi Alpha Gamma; 
.... 

所以我在同一個領域有不同的句子(由;分隔),我需要一個正則表達式角色,將任何一個句子視爲一個組,在尋找某些詞的存在的女巫中。

我使用cms所以我需要改變查詢:改變數據庫意味着數月的工作。

+0

爲什麼不乾脆使用'''LIKE'''? IOW,''Where field LIKE「;%Gama%;」 OR字段,如「;%Alpha%;」'''。 –

+0

如果您使用分號分隔的值,並且只想提取特定的子字符串(分號之間的單個限定值),則表示數據庫表結構不是最佳的。時間正常化並將值分成多行。現在智能設計意味着以後更容易工作附:當發佈msyql問題時,它提供了最大的清晰度來發布您的表結構和一些相關的示例行。 – mickmackusa

+0

@mickmackusa更改了帖子更清晰。 我在一個cms中,我不能改變結構;只有查詢 – frisk

回答

1

我相信你正在嘗試做的是,有一個字段與既有Alpha & Gamma與這兩個值都不可能以任何順序各自對對方有一個分號分隔值選擇行可以是他們之間的其他詞。

所以考慮到有這樣的字段行:

|field               | 
|-----------------------------------------------------------------| 
|Model Alpha Beta Gamma;Model Hitch Pi Alpha;Model Pi Alpha Gamma | 
|-----------------------------------------------------------------| 
|Model Beta Gamma;Model Hitch Pi Alpha;Model Pi Gamma    | 
|-----------------------------------------------------------------| 
|Model Beta Omega             | 
|-----------------------------------------------------------------| 
|Model Alpha Gamma            | 
|-----------------------------------------------------------------| 
|Model Pi Beta Gamma;Model Hitch Pi Gamma       | 
|-----------------------------------------------------------------| 
|Model Hitch Gamma Sigma Sigma         | 
|-----------------------------------------------------------------| 
|Model Zeta Tau Alpha;Model Alpha Xi Delta      | 
|-----------------------------------------------------------------| 
|Model Alpha Epsilon Phi;Model Gamma Phi Alpha     | 
|-----------------------------------------------------------------| 
|Model Sigma Gamma Alpha; Model Lambda Lambda Lambda    | 
|-----------------------------------------------------------------| 
|Model Beta Beta Phi; Model Hitch Lambda Pi; Model Phi Pi   | 
|-----------------------------------------------------------------| 

您可以使用此查詢:

SELECT field FROM `table` WHERE `field` REGEXP 'Alpha[^;]+Gamma|Gamma[^;]+Alpha' 

爲了把這些行在結果:

|field               | 
|-----------------------------------------------------------------| 
|Model Alpha Beta Gamma;Model Hitch Pi Alpha;Model Pi Alpha Gamma | 
|-----------------------------------------------------------------| 
|Model Alpha Gamma            | 
|-----------------------------------------------------------------| 
|Model Alpha Epsilon Phi;Model Gamma Phi Alpha     | 
|-----------------------------------------------------------------| 
|Model Sigma Gamma Alpha; Model Lambda Lambda Lambda    | 
|-----------------------------------------------------------------| 
+0

謝謝@mickmackusa,你非常有用。 我有未定義的單詞數量,所以如果存在可能尋找整個單詞的任意位置(避免組合所有可能的組合),我的要求將完全滿足 – frisk