2

您可以在 postgreSQL 查询中格式化电话号码吗?我有一个电话号码列。电话号码是这样保存的:1234567890。我想知道postgres是否会格式化为(123)456-7890。我可以在查询之外执行此操作,我使用的是 php,但如果我能够获得像 (123) 456-7890 这样的查询输出,那就太好了

4

5 回答 5

4

这将为您工作:

SELECT
  '( ' || SUBSTRING(CAST(NUMBER AS VARCHAR) FROM 1 FOR 3) || ' ) ' 
 || SUBSTRING(CAST(NUMBER AS VARCHAR) FROM 4 FOR 3) || '-' 
 || SUBSTRING(CAST(NUMBER AS VARCHAR) FROM 7 FOR LENGTH(CAST(NUMBER AS VARCHAR)))
FROM
  YOURTABLE

此外,这是一个SQLFiddle

于 2013-10-28T19:31:08.920 回答
4

使用正则表达式,它更灵活且易于阅读。假设数字在“电话”字段中:

SELECT regexp_replace(phone, '(\d{3})(\d{3})(\d{4})', '(\1) \2-\3') phone FROM table;

您还可以通过各种方式对其进行修饰:为国家代码添加可选数字,允许多个数字或更多。

例如,首先去除非数字和固定的半格式值,如 (123) 4567890:

SELECT regexp_replace(regexp_replace(phone, '\D', '', 'g'), '(\d{3})(\d{3})(\d{4})', '(\1) \2-\3') phone FROM table;
于 2019-06-22T20:32:21.740 回答
1

使用SUBSTRING函数

就像是:

  SELECT 
 '(' || SUBSTRING((PhoneNumber, 1, 3) + ') ' || SUBSTRING(PhoneNumber, 4,3) || '-' || SUBSTRING((PhoneNumber,7,4)
于 2013-10-28T19:24:41.070 回答
0

另一种选择是使用该FORMAT功能。有关详细信息,请参阅Postgresql 字符串函数

你的例子看起来像

SELECT FORMAT('(%s)%s-%s', SUBSTR(phone, 1, 3), SUBSTR(phone, 4, 3), SUBSTR(phone, 7, 4))
FROM table;
于 2021-12-16T13:55:07.680 回答
0
SELECT '(' || SUBSTRING(phone FROM 1 FOR 3) || ') ' || 
              SUBSTRING(phone FROM 4 FOR 3) || '-' || 
              SUBSTRING(phone FROM 7 FOR 4) 
FROM table;

这将返回格式为 (123) 456-7890 的所有电话号码,但不会有列标题。要解决此问题,请使用以下 SELECT 语句:

SELECT '(' || SUBSTRING(电话从 1 到 3) || ') ' || SUBSTRING(电话从 4 到 3)|| '-' || SUBSTRING(电话从 7 到 4)作为电话从章节;

希望这可以帮助!

于 2018-11-13T10:52:26.717 回答