2012-03-12 71 views
0

根據docs選擇一個REGXP將總是產生一個布爾值(匹配或不匹配),但我試圖得到結果,如果它是匹配,意味着如果我在做。 ..mysql regexp返回布爾值而不是值

select file_id REGEXP '^\d{10}' from my_table; 

什麼,我想回去是不是假意或真心,但假的或實際的10位數字是啓動的file_id。

我錯過了什麼嗎?或者這真的是mySQL如何實現正則表達式?!

我意識到在我的情況下,我可以使用SUBSTR,但現在我只是好奇他們爲什麼會偏離規範的正則表達式匹配如何在其他地方工作。

+1

我會冒險猜測 - 要返回一個匹配,正則表達式實現必須深入到捕獲的組中,以及用戶想要回來的哪一個,這比簡單地說「它匹配」或「它不比賽」。這也將是一個巨大的性能衝擊,因爲通常希望使用'REGEXP'(註釋 - 同義詞'RLIKE')來測試匹配,而不是提取結果。 'REGEXP'(或'RLIKE')只是一個更復雜的'LIKE'。 – 2012-03-12 05:37:42

+0

[有用的Mysql正則表達式](http://www.techotopia.com/index.php/MySQL_Regular_Expression_Searches) – 2012-03-12 05:46:45

+0

@ mathematicalcoffee,我猜...但如果我願意採取性能打擊,我不認爲MySQL應該阻止我!我聽到你對分組的看法,但這就是MATCH應該做的事! – 2012-03-12 06:36:48

回答

1

在回答你的問題時,「這真的是MySQL如何實現正則表達式嗎?」答案是肯定的。它只是在成功或失敗時返回一個布爾值。

在回答你的問題時,「爲什麼他們會偏離規定的規範」,答案是它在查詢中更有用,因爲你更經常測試某些東西的存在,而不是根據模式提取一些東西。提取事物通常使用過程語言來完成,而不是關係數據庫。

要做你想做的事,你可能想編寫一個存儲過程來完成必要的字符串操作。