【问题标题】:Format phone number to international将电话号码格式化为国际
【发布时间】:2017-06-03 07:05:22
【问题描述】:

我已经找到了“How to format a numeric column as phone number in SQL”,但它只是破坏了我的号码。

我有一个类似064184335 的电话号码,想将其格式化为+49 641 84335

我试过了:

UPDATE vtiger_contactdetails
    SET phone = '+49' +' '+ SUBSTRING(phone, 2, 2 ) + ' ' + SUBSTRING(phone, 4, 3)

但我得到了295 作为电话号码。 此外,第二个SUBSTRING 中的3 应该是电话号码的其余部分。

如果我想更改不同表格中的每个电话号码,它不应该使用:

UPDATE vtiger_account, vtiger_contactdetails, vtiger_contactsubdetails
SET vtiger_account.phone = CONCAT('+49', ' ', SUBSTRING(vtiger_account.phone, 2, 3 ), ' ', SUBSTRING(vtiger_account.phone, 5, length(vtiger_account.phone)))
SET vtiger_account.otherphone = CONCAT('+49', ' ', SUBSTRING(vtiger_account.otherphone, 2, 3 ), ' ', SUBSTRING(vtiger_account.otherphone, 5, length(vtiger_account.otherphone)))
SET vtiger_contactdetails.phone = CONCAT('+49', ' ', SUBSTRING(vtiger_contactdetails.phone, 2, 3 ), ' ', SUBSTRING(vtiger_contactdetails.phone, 5, length(vtiger_contactdetails.phone)))
SET vtiger_contactdetails.mobile = CONCAT('+49', ' ', SUBSTRING(vtiger_contactdetails.mobile, 2, 3 ), ' ', SUBSTRING(vtiger_contactdetails.mobile, 5, length(vtiger_contactdetails.mobile)))
SET vtiger_contactsubdetails.homephone = CONCAT('+49', ' ', SUBSTRING(vtiger_contactsubdetails.homephone, 2, 3 ), ' ', SUBSTRING(vtiger_contactsubdetails.homephone, 5, length(vtiger_contactsubdetails.homephone)))
SET vtiger_contactsubdetails.otherphone = CONCAT('+49', ' ', SUBSTRING(vtiger_contactsubdetails.otherphone, 2, 3 ), ' ', SUBSTRING(vtiger_contactsubdetails.otherphone, 5, length(vtiger_contactsubdetails.otherphone)))
SET vtiger_contactsubdetails.assistantphone = CONCAT('+49', ' ', SUBSTRING( vtiger_contactsubdetails.assistantphone, 2, 3 ), ' ', SUBSTRING( vtiger_contactsubdetails.assistantphone, 5, length( vtiger_contactsubdetails.assistantphone)))

如何忽略已经格式化的数字?

【问题讨论】:

  • 我实际上会将国家代码 ('+49') 存储在另一列中,因为如果在该国家/地区调用 within 则不需要它。就此而言,您也不应该将其格式化存储 - 这是一个显示层问题。
  • 对于我的第二个代码,我只是得到一个语法错误。我对这些东西很陌生。我会尽力的,请不要评判:)

标签: sql phpmyadmin format substring vtiger


【解决方案1】:

我猜你正在使用 MySQL。连接字符串的方式是concat():

UPDATE vtiger_contactdetails
    SET phone = CONCAT('+49', ' ', SUBSTRING(phone, 2, 2 ), ' ', SUBSTRING(phone, 4, 3));

要获取所有字符,只需对SUBSTRING() 使用两个参数:

UPDATE vtiger_contactdetails
    SET phone = CONCAT('+49', ' ', SUBSTRING(phone, 2, 2 ), ' ', SUBSTRING(phone, 4));

请注意,这适用于 MySQL,但并非适用于所有数据库。

【讨论】:

  • 好的,首先感谢它的工作。但是有没有办法改变第二个子字符串,所以它把左边的数字加到最后?
  • 您可以使用substring(phone, 4, length(phone))。长度参数太大,但没关系。 substring() 停在字符串的末尾。或者,只使用两个参数。
  • 它工作得很好,谢谢。但是我怎么能忽略已经格式化的数字呢?我试过 WHERE phone NOT LIKE '+49 ____' 但没用
  • 如果要指定数字的所有间距,请使用正则表达式 (dev.mysql.com/doc/refman/5.7/en/regexp.html)。否则,where phone not like '+49 %' 可能会做得很好。
【解决方案2】:

尝试修改后的查询:

SELECT '+49' +' '+ SUBSTRING('064184335', 2, 3 ) + ' ' 
    + SUBSTRING('064184335' , 5, 5)

仅使用 + 更新:

  UPDATE vtiger_contactdetails
    SET phone = '+49' +' '+ SUBSTRING(phone, 2, 3 ) + ' ' 
        + SUBSTRING(phone , 5, 5)

使用CONCAT

UPDATE vtiger_contactdetails
    SET phone = CONCAT('+49', ' ', 
    SUBSTRING(phone, 2, 3 ), ' ', SUBSTRING(phone, 5, 5))

【讨论】:

  • 它总是一个不同的数字,我想一次选择全部格式化它们
  • 第一个只是一个例子。也试试其他两个。
  • 使用 concat 对我来说很好。谢谢我只需要尝试一次更新几个表格和数字。我先试试自己
猜你喜欢
  • 1970-01-01
  • 2016-07-27
  • 1970-01-01
  • 2016-04-05
  • 1970-01-01
  • 1970-01-01
  • 2022-12-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多