SQL格式化字段

时间:2012-03-09 03:44:21

标签: sql sqlite formatting

在我的数据库中,我有一个名为telephone number的列 大多数数字是### - ### - ####,其中一些是###########。如何运行查询以将所有数字格式化为相同?

我更喜欢:

###-###-#####

3 个答案:

答案 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:这是一个随意的解决方案。