在我的数据库中,我有一个名为telephone number
的列
大多数数字是### - ### - ####,其中一些是###########。如何运行查询以将所有数字格式化为相同?
我更喜欢:
###-###-#####
答案 0 :(得分:1)
我会使用脚本语言来做这样的事情。在PHP中:
$string = "1234567890";
$formatted_string = substr($string,0,3)."-".substr($string,3,3)."-".substr($string,6,4);
答案 1 :(得分:1)
我当然希望您只与美国(假设您的示例)电话号码打交道。一旦你开始走向国际,事情变得艰难。我也希望这些变化只是你说的两个...... SQL不是很擅长这个,但是这里有。
编辑根据要求提供的SQLite查询。我使用了SQLite文档,特别是核心函数http://www.sqlite.org/lang_corefunc.html和select语句http://sqlite.org/lang_select.html。
select SUBSTR(Phone, 1, 3) + '-' +
SUBSTR(PHONE, 4, 3) + '-' +
SUBSTR(PHONE, 7, 4)
from (
select REPLACE(REPLACE(REPLACE(REPLACE(Phone, '-', ''), '(', ''), ')', ''), ' ', '') Phone
from source
) xx
我的原始查询在MS SQL中有效。
select SUBSTRING(Phone, 1, 3) + '-' +
SUBSTRING(PHONE, 4, 3) + '-' +
SUBSTRING(PHONE, 7, 4)
from source
where CHARINDEX(Phone, '-') = 0
您可以考虑先清理所有电话号码。 EG:
select SUBSTRING(Phone, 1, 3) + '-' +
SUBSTRING(PHONE, 4, 3) + '-' +
SUBSTRING(PHONE, 7, 4)
from (
select REPLACE(REPLACE(REPLACE(REPLACE(Phone, '-', ''), '(', ''), ')', ''), ' ', '') Phone
from source
) xx
电话号码可能会变得非常复杂。例如,我错过了清理期间。我强烈建议使用除T-SQL之外的其他代码清理它们。
答案 2 :(得分:-1)
SELECT CASE WHEN LENGTH(telephone_number)=10
THEN Do Something
ELSE DEfault
END
FROM YOURTABLE;
----------
PS:这是一个随意的解决方案。