2011-11-15 18 views
0

的第一個數字部分,我有一個數據庫(Postgres的7.4)域地址提取場

示例數據

address   | zip 
-----------------------+-------------+ 
123 main street  | 12345 
-----------------------+-------------+ 
3 where road   | 12345 
-----------------------+-------------+ 
South 3 where road  | 12345 

的查詢

SELECT * 
FROM tbl 
WHERE zip = 12345 
AND address ILIKE '3%' 

我得到的所有,但我不知道想要123主要街道

SELECT * 
FROM tbl 
WHERE zip = 12345 
AND address ILIKE '123%' 

我得到我想要的結果

我的問題是我該如何匹配地址的數字部分?

+0

是否postgre支持'REGEX'?我知道MySQL,但我不太確定何時涉及到postgre。 – Polynomial

+0

是的,但這是Postgres的舊版本,所以它是我的限制http://www.postgresql.org/docs/7.4/static/functions-matching.html –

+0

感謝您的澄清。我並不確定。只是一個想法 - 如果你只是想匹配一個固定的數字,爲什麼不只是做你的第二個查詢?或者你是否在開始時尋找具有(出)數字的行? – Polynomial

回答

1

試試這個:

SELECT substring(address, '^\\d+') AS heading_number 
FROM tbl 
WHERE zip = 12345 
AND address ILIKE '3%' 

返回字符串的開始1個或多個數字。
如果你想在一開始的字符串,而不是序列中位數第一順序離開了錨^。例如:

SELECT substring('South 13rd street 3452435 foo', '\\d+'); 

閱讀關於substring()regular expressions手動英寸
在較新版本(8.0版以上),不要忘了使用escape string syntax這樣的:

SELECT substring('South 13rd street 3452435 foo', E'\\d+'); 
+0

我得到類型「e」不存在。如果我刪除E似乎工作,仍然在測試 –

+0

@PhillPafford:啊,'E'爲[轉義字符串語法](http://www.postgresql.org/docs/9.1/interactive/sql-syntax-lexical。 HTML)被8.0(我認爲)入侵,只是把它留下 –

+0

如果一個單詞在數值前面,像南三街一樣,這仍然有效嗎? –