2011-06-07 63 views
1

我想選擇一個基於它滿足3條標準之一的字段......我不知道如何做到這一點。我認爲RegExp可能是我不熟悉編寫它們的最佳方法。MySQL查詢正則表達式

說我有整數123,我想符合以下情況:

123(那123只後無空格或其他數字) 123-10 /二千零七分之十二00:00(這就是123連字符和一個日期,或者實際上它可能是在連字符後的任何東西) 123_1014859(那123下劃線,或再次任何下劃線後)

有沒有辦法做到這一點使用MySQL?

回答

2

一個正則表達式是合理的,但它不是最好的執行選項。最後的比較將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

1
select * from foo where bar regexp '^123-|_' 

(未測試)

1

我會避免在SQL語句中使用正則表達式。有人可以糾正我,如果我錯了,但MySQL必須使用另一個引擎來運行正則表達式。

SELECT * FROM table 
    WHERE field like "123" 
    OR field LIKE "123-%" 
    OR field like "123_%"; 
+0

,我不知道,MySQL使用另一臺發動機 - 的SQL Server 2005+需要CLR,如果你想正則表達式支持(卸載到.NET)... – 2011-06-07 02:49:08