我想選擇一個基於它滿足3條標準之一的字段......我不知道如何做到這一點。我認爲RegExp可能是我不熟悉編寫它們的最佳方法。MySQL查詢正則表達式
說我有整數123,我想符合以下情況:
123(那123只後無空格或其他數字) 123-10 /二千零七分之十二00:00(這就是123連字符和一個日期,或者實際上它可能是在連字符後的任何東西) 123_1014859(那123下劃線,或再次任何下劃線後)
有沒有辦法做到這一點使用MySQL?
我想選擇一個基於它滿足3條標準之一的字段......我不知道如何做到這一點。我認爲RegExp可能是我不熟悉編寫它們的最佳方法。MySQL查詢正則表達式
說我有整數123,我想符合以下情況:
123(那123只後無空格或其他數字) 123-10 /二千零七分之十二00:00(這就是123連字符和一個日期,或者實際上它可能是在連字符後的任何東西) 123_1014859(那123下劃線,或再次任何下劃線後)
有沒有辦法做到這一點使用MySQL?
一個正則表達式是合理的,但它不是最好的執行選項。最後的比較將MySQL的正則表達式支持與通配符LIKE
聲明的左側看齊 - 可行,但是可用的每個選項中速度最慢。
根據你的榜樣,您可以使用:
SELECT t.*
FROM YOUR_TABLE t
WHERE t.column LIKE '123-%'
OR t.column LIKE '123_%'
另一種選擇,因爲OR
可以是一個性能問題也將使用UNION:
SELECT a.*
FROM YOUR_TABLE a
WHERE a.column LIKE '123-%'
UNION ALL
SELECT b.*
FROM YOUR_TABLE b
WHERE b.column LIKE '123_%'
UNION ALL
將返回所有兩個表的結果; UNION
刪除重複項,並且比這個事實慢於UNION ALL
。
select * from foo where bar regexp '^123-|_'
(未測試)
我會避免在SQL語句中使用正則表達式。有人可以糾正我,如果我錯了,但MySQL必須使用另一個引擎來運行正則表達式。
SELECT * FROM table
WHERE field like "123"
OR field LIKE "123-%"
OR field like "123_%";
,我不知道,MySQL使用另一臺發動機 - 的SQL Server 2005+需要CLR,如果你想正則表達式支持(卸載到.NET)... – 2011-06-07 02:49:08