电话号码搜索postgres

时间:2018-05-10 02:45:36

标签: regex postgresql pattern-matching

假设我在" people"中有以下数据?表

 id     name      phone_number
 1      Pete      +651234-5678
 2      John      1234 56 78 Main number

如果我的搜索字符串是" 123456789"如何提取与电话号码匹配的行 - 我假设需要一些正则表达式,但在Postgres中执行此操作的最佳方法是什么?

3 个答案:

答案 0 :(得分:1)

看起来这样可行

 x="SELECT id FROM people WHERE regexp_replace(phone_number, '[^0-9]', '', 'g') = '12345678';"

或者

x="SELECT id FROM people WHERE regexp_replace(phone_number, '[^0-9]', '', 'g') LIKE '12345678';"

这是最好的方式吗?

答案 1 :(得分:1)

当然不会找到您原来的搜索字符串,但我认为我的答案是完整的 - 只有投票才能说明?

select *, regexp_replace(phone_number, '[^0-9]', '', 'g')  
from people 
where position ( '12345678' in regexp_replace(phone_number, '[^0-9]', '', 'g')) >= 0 ;

答案 2 :(得分:0)

您可以使用以下查询:

SELECT * FROM people WHERE phone_number ~ '^1234\s*56\s*78.*'

模式\s*将匹配零个或多个空格。正则表达式将匹配以下任何一项:

1234 56 78 Main number
123456 78 some text
12345678