gpt4 book ai didi

sql - 即时选择和替换(干净)数据 - SQL

转载 作者:行者123 更新时间:2023-11-29 11:49:14 28 4
gpt4 key购买 nike

我是 SQL 的新手。我正在尝试从数据库 (Postgres) 获取数据,如果这些数据无效,则即时替换它们。是否可以使用纯 SQL 来执行此操作?例如,在我的数据库 users 中,我有包含以下数据的字段 phone:

|phone           |
------------------
|+79844533324 |
|893233314215 |
|dfgdhf |
|45 |
|+ |
| |
|(345)53326784457|
|8(123)346-34-45 |

etc..

如果出现以下情况,我只想获取最后十位数字:

  1. 电话号码以 8 或 7 或 +7 或 +8 开头。
  2. 该数字包含8或7或+7或+8之后的十位数字,不多不少

像这样:

|phone           |
------------------
|9844533324 |
|1233463445 |

我想这对于 SQL 来说可能太复杂了。我已经研究了大量的手册,但其中大部分只涵盖了带有正则表达式条件的 SELECT。

最佳答案

我认为这可能有效:

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)

从字段中删除所有非数字,然后取右边的十个字符——只有满足以下条件才会这样做:

phone ~ '^\+?[78]' and

手机以可选的“+”开头,然后是 7 或 8

regexp_replace (phone, '\D', '', 'g') ~ '^[78]\d{10}$'

并且该字段以 7 或 8 开头,后跟正好十个其他数字,所有非数字都被剥离。

结果:

9844533324
1233463445

关于sql - 即时选择和替换(干净)数据 - SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47790673/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com