我是SQL的新手。我正在尝试从数据库(Postgres)获取数据并在运行时替换它们,如果它们无效的话。使用纯SQL可以做到这一点吗?例如,在我的数据库users
中,我有字段phone
,其中包含以下数据:
|phone |
------------------
|+79844533324 |
|893233314215 |
|dfgdhf |
|45 |
|+ |
| |
|(345)53326784457|
|8(123)346-34-45 |
etc..
如果符合以下条件,我只想获得最后十位数字:
|phone |
------------------
|9844533324 |
|1233463445 |
我想这可能是复杂的SQL。我已经研究了大量的手册,但大多数手册只包括SELECT和regex条件。
答案 0 :(得分:1)
我认为这可行:
U+0041
以解释的方式:
select
right (regexp_replace (phone, '\D', '', 'g'), 10)
from foo
where
phone ~ '^\+?[78]' and
regexp_replace (phone, '\D', '', 'g') ~ '^[78]\d{10}$'
从字段中删除所有非数字,然后取正确的十个字符 - 只有在满足以下条件时才会执行此操作:
right (regexp_replace (phone, '\D', '', 'g'), 10)
手机以可选的“+”开头,然后是7或8
phone ~ '^\+?[78]' and
并且所有非数字字段都以7或8开头,后跟十个其他数字。
结果:
regexp_replace (phone, '\D', '', 'g') ~ '^[78]\d{10}$'