SQL Select CASE-WHEN - 如何从电话号码中删除格式

Posted

技术标签:

【中文标题】SQL Select CASE-WHEN - 如何从电话号码中删除格式【英文标题】:SQL Select CASE-WHEN - How to remove formatting from telephone numbers 【发布时间】:2021-02-06 15:26:34 【问题描述】:

我有一个 SQL Select 语句,它从多个字段创建一个表。我正在使用 CASE/WHEN 更改一些值,但我不知道如何格式化结果。

SELECT DISTINCT field1, field2, field3, field4,
CASE meta_value WHEN 'male' then 'M' WHEN 'female' THEN 'F' etc.

返回的电话号码可能有我想删除的其他字符,即:

(404) 202-2039
404-202-2039
1-404-202-2039

我只想返回不带空格或其他字符、连字符、括号等的数字:

4042022039

关于如何最好地做到这一点的任何想法?

【问题讨论】:

请用您正在运行的数据库(和版本)标记您的问题:mysql、oracle、sqlserver...?字符串函数是高度特定于数据库的。 没有+ 国际号码+44 (0)123 456 789 您需要REPLACE() 函数将不需要的字符转换为空字符串。如果您的数据库引擎支持REPLACE_REGEX() 类型的功能,您将能够在一次调用中删除所有不需要的字符。 我正在使用 MySQL 顺便说一句。 【参考方案1】:

如果你运行的是 MySQL 8.0,你可以使用regexp_replace():

regexp_replace(phone_number, '[^0-9]', '') clean_phone_number

【讨论】:

@DavidS.: select field1, field2, regexp_replace(phone_number, '[^0-9]', '') clean_phone_number, case meta_value when ... then ... end from ... 看来我被困在 MySQL 5.7 上,这要感谢我的托管服务提供商。我没有看到 REGEXP_REPLACE 在哪里实现或支持。谢谢一群人!

以上是关于SQL Select CASE-WHEN - 如何从电话号码中删除格式的主要内容,如果未能解决你的问题,请参考以下文章

sql问题--case-when

Oracle Sql关于case-when,if-then,decode

使用 numpy 生成具有 case-when 条件的随机数据

IsNumeric 和 Case-when 计算数值并更改其在结果中的显示方式

有条件地选择要在 FOR LOOP 中迭代的集合

如何扩展 Zend\Db\Sql\Select?