【问题标题】:SQL Select CASE-WHEN - How to remove formatting from telephone numbersSQL Select CASE-WHEN - 如何从电话号码中删除格式
【发布时间】: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 顺便说一句。

标签: java mysql eclipse


【解决方案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 在哪里实现或支持。谢谢一群人!
猜你喜欢
  • 2020-10-07
  • 2015-11-28
  • 1970-01-01
  • 2020-09-07
  • 2020-10-29
  • 2017-03-10
  • 1970-01-01
  • 2012-09-17
  • 1970-01-01
相关资源
最近更新 更多