2012-03-09 64 views
-1

在我的数据库中,我有一个名为telephone number的列。
大部分数字是### - ### - ####其中有些是###########。我如何运行查询来格式化所有数字看起来相同?SQL格式化字段

我宁愿:

###-###-##### 
+0

你可以通过使用长度函数来使用case语句... – Teja 2012-03-09 03:46:15

回答

1

我会用这样的脚本语言。在PHP:

$string = "1234567890"; 
$formatted_string = substr($string,0,3)."-".substr($string,3,3)."-".substr($string,6,4); 
-1
SELECT CASE WHEN LENGTH(telephone_number)=10 
      THEN Do Something 
      ELSE DEfault 
     END 
FROM YOURTABLE; 


---------- 

PS:这是一个武断的解决方案。

+0

我会使用CONCAT,SUBSTR函数来代替“做某事” – Teja 2012-03-09 03:49:38

1

我当然希望你正在处理与美国(假设从你的例子)电话号码只。一旦你开始走向国际,事情变得艰难。我也希望变化只是你说的两个... SQL在这方面不是很好,但是在这里。

编辑 SQLite查询,请求。我使用SQLite文档,特别是核心功能http://www.sqlite.org/lang_corefunc.html和选择语句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以外的其他代码中清理它们。

+0

所有数字都是美国,波多黎各。 – 2012-03-09 15:08:15

+0

SQLite没有SUBSTRING或CHARINDEX。它有SUBSTR,但不知道什么是CHARINDEX – 2012-03-09 18:33:24

+0

对不起,我没有注意到SQLite的要求。 CHARINDEX只是一个函数,用于在字符串中的每个位置都从1到长度编号时定位字符串中的字符。我还没有在SQLite中找到类似的功能。 – Griffin 2012-03-15 03:27:50