如果我運行此查詢:在正則表達式匹配中PostgreSQL 8.3到9.2改變了什麼?
SELECT 'Via Orologio 122 A' SIMILAR TO '(Strada|Via) % [0-9]+([A-Z])?';
我期望得到TRUE。 postgreSQL的版本9.1.8返回期望的值,但是在版本8.3中返回FALSE。我認爲問題是最後的問號。實際上,查詢:
SELECT 'Via Orologio 122 A' SIMILAR TO '(Strada|Via) % [0-9]+([A-Z])';
在兩個版本中都返回TRUE。
任何人都知道這兩個版本之間的區別是什麼?
'相似TO'不使用正則表達式正確,它使用SQL標準規定的bastardised形式。 PostgreSQL只支持它,因爲標準說它應該。在簡單的'LIKE'不足的地方使用'〜'運算符。至於發生了什麼變化:看起來像是與我「相似」的錯誤修正,但您應該查看細節中的註釋和git歷史記錄。 – 2013-03-24 22:12:45
哪個版本8.3? – 1ac0 2013-03-24 22:24:28
實際上,[Postgres在內部重寫'SIMILAR TO'到正則表達式](http://dba.stackexchange.com/questions/10694/pattern-matching-with-like-similar-to-or-regular-expressions-in- PostgreSQL的/ 10696#10696)。換句話說:對於每個「SIMILAR TO」,至少有一個'〜'表達式更快。 *如果*您可以'LIKE'來代替,那可能會更快。 – 2013-03-24 22:55:34