gpt4 book ai didi

sql - Oracle 中不是 REGEXP_LIKE

转载 作者:行者123 更新时间:2023-12-02 01:48:55 25 4
gpt4 key购买 nike

我有一张大 table ,上面有电话号码。电话号码都是字符串,应该是“+9628789878”或类似的。 (“+”号后跟 9 到 13 位数字。)

用户错误发现一行包含字符串“+987+9873678298”。显然它不应该在那里,我想知道还有多少其他此类错误的情况。

我尝试了这个查询,但它没有完成任务。我的想法是任何与这个字符串不同的东西。 (哦,该表不是按电话号码索引的。)

SELECT user_key,
first_name,
last_name,
phone_number
FROM users u
WHERE regexp_like(phone_number, '[^\+[0-9]*]')
AND phone_number IS NOT NULL

最佳答案

如果您需要查找 phone_number 不是由 '+' 后跟 9-13 位数字组成的所有行,则应执行以下操作:

select *
from users
where not regexp_like(phone_number, '^\+[0-9]{9,13}$')

它的作用:

  • ^ 字符串的开头,以避免类似 'XX +123456789'
  • \+ '+'
  • [0-9]{9,13} 9-13 位数字的序列
  • $ 字符串结尾,避免出现类似 '+123456789 XX'
  • 的字符串

另一种没有正则表达式的方法可能如下:

where not (
/* strings of 10-14 chars */
length(phone_number) between 10 and 14
/* ... whose first is a + */
and substr(phone_number, 1, 1 ) = '+'
/* ...and that become a '+' after removing all the digits */
and nvl(translate(phone_number, 'X0123456789', 'X'), '+') = '+'
)

这可能比正则表达式方法更快,即使它基于更多条件,但我相信只有测试才能告诉您哪一个性能最好。

关于sql - Oracle 中不是 REGEXP_LIKE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42536101/

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