提取字段的第一个数字部分

时间:2011-11-15 21:45:46

标签: sql postgresql split numeric

我有一个地址

的数据库(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%'

我得到了我想要的结果

我的问题是如何匹配地址的数字部分?

1 个答案:

答案 0 :(得分: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+');