2012-09-23 59 views
2

我使用REGEXP來匹配LONGTEXT列中大量文本中的特定字符串。例如:MySQL REGEXP整數比較

Text text text text text 
text text text text text 
text text SOLD: 75/101 text 
text text text text text 

所以我的疑問一直在尋找這樣的:

SELECT * FROM `test` WHERE `file` REGEXP 
'SOLD:[ ]{1}[0-9]{1,2,3}/[0-9]{1,2,3}' 

這將正確地匹配SOLD: 75/101字符串。

但是有可能做分子比較嗎?如,找到全部SOLD: >=75/101

比較號碼將是用戶通過$ _POST輸入的號碼。我知道REGEXP並不是真的用來比較數字,但是有一些方法可能捕獲帶正則表達式的字符串,然後用其他方式對整數進行比較?

+0

你可以創建存儲過程來封裝任何邏輯 – ravnur

+0

你只需要考慮像「76/101」和「123/101」這樣的分數,或者你還需要考慮70/80(這是大於'75/101',當然)? –

+0

@TimPietzcker是的,我也必須考慮前兩個。我並不想將整個分數作爲分子進行比較。 – Norse

回答

3

如果你只需要看看分子,如您的評論說,然後

SELECT * FROM mytable WHERE mycolumn REGEXP 
"SOLD: ([1-9][0-9]{2,}|[8-9][0-9]|7[5-9])/101"; 

應該工作。

順便說一句,[0-9]{1,2,3}是大多數正則表達式的語法錯誤(我不知道MySQL如何處理它);指定範圍的正確方法是[0-9]{1,3}

+0

用戶輸入的$ _POST值是80還是90? – Norse

+0

啊,對。我沒有完全讀完那部分。對不起,MySQL正則表達式不支持捕獲組,所以我想你真的必須使用自定義函數。不幸的是,我不太瞭解MySQL提出的解決方案。 –

+0

以及這是一個好的開始,謝謝 – Norse