postgres正则表达式国际电话代码匹配

时间:2016-10-19 10:05:38

标签: sql regex postgresql

当我插入下面的代码时

select (select i.billsec from isp_cdr i) * 
       (select l.user_rate from lcr l ) as nibble_total_billed
where i.destination_number !~'1548749' 
and i.destination_number ~'^(?:[0-7] ?){6,14}[0-9]$' = l.digits;

我收到此错误

  

错误:缺少表“i”的FROM子句条目
  第2行:其中i.destination_number!~'1548749'

isp_cdr表:

destination_number
nibble_total_billed
caller_id
billsec

lcr表:

user_rate
digits 

数字是电话代码 destination_number是用户呼叫的电话号码

此查询的目的是使用国家/地区代码(数字)计算帐单检查,然后使用user_rate将billsec更新乘以nibble_total_billed

示例数据

isp_cdr表

destination_number           billsec
60161234587                    50 
60134812315                   127 
60147123512                    98 

lcr表

digits             user_rate
601                   0.15 
4672                  1.6
61891010              1.69

1 个答案:

答案 0 :(得分:0)

我不清楚你想在这里实现什么。

回答直接问题,为什么会收到错误。

你的陈述基本上是这样的:

select (..) * (...) as nibble_total_billed
-- you are missing a FROM after the SELECT
where i.destination_number !~'1548749' 
  and i.destination_number ~'^(?:[0-7] ?){6,14}[0-9]$' = l.digits;

似乎您正在寻找两个表之间的连接:

select i.billsec * l.user_rate as nibble_total_billed
from isp_cdr i
  join l.user_rate from l on i.destination_number = l.digits
where i.destination_number !~ '1548749' 
  and i.destination_number ~'^(?:[0-7] ?){6,14}[0-9]$'

鉴于(无效)条件i.destination_number ~'^(?:[0-7] ?){6,14}[0-9]$' = l.digits,您似乎希望"清理" destination_number之前以某种方式将其与列digits进行比较,但由于您没有显示任何样本数据,因此无法回答问题的这一部分。