Mysql
如何用正則表達式查詢mysql表?
我正在使用正確的正則表達式,已經用其他工具測試過。但是在mysql中似乎不能正常工作。說這個數據:
我想選擇所有以 2 個非數字後跟一個點開始的記錄,然後是一個數字,後跟一個 .00 序列(例如 DE.1.00.00.00.00)
\D{2}\.\d?\.0{2}.0{2}.0{2}.0{2}
以上單獨使用通常有效。但是在 mysql 上,像下面這樣的簡單查詢是行不通的。它將返回一個包含所有列且沒有任何錯誤但也沒有任何值的表。為什麼?
SELECT * FROM V35_CATEGORIE cat WHERE cat.CategoriaCodice REGEXP '\D{2}\.\d?\.0{2}.0{2}.0{2}.0{2}'
我自己回答。總之,上面的sql語法是正確的,那麼如何用正則表達式查詢mysql表呢?就像我做的一樣。
它不起作用的原因是正則表達式語法對於 mysql 來說太“複雜”了。我發現 mysql 不支持標準正則表達式的全部語法可能性。我必須使用更簡單的符號/結構。因此,例如,
\D{2}
我可以使用[A-Z]{2}
而不是 \d,因為我知道我需要 1 或 2,所以我可以使用[1,2]?
. 像下面這樣的語法將在 mysql 中完美地匹配像 ‘IT.1.12.00.00.00’ 這樣的字元串:[A-Z]{2}\.[1,2]?\.[1-9][0-9](\.00){3}
使用完整的正則表達式語法,我可以使用前瞻斷言和其他構造,但無論如何,現在為了我的需要,我可以使用簡單的“舊”語法。