2012-03-09 91 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