在我的數據庫中,我有一個名爲telephone number
的列。
大部分數字是### - ### - ####其中有些是###########。我如何運行查詢來格式化所有數字看起來相同?SQL格式化字段
我寧願:
###-###-#####
在我的數據庫中,我有一個名爲telephone number
的列。
大部分數字是### - ### - ####其中有些是###########。我如何運行查詢來格式化所有數字看起來相同?SQL格式化字段
我寧願:
###-###-#####
我會用這樣的腳本語言。在PHP:
$string = "1234567890";
$formatted_string = substr($string,0,3)."-".substr($string,3,3)."-".substr($string,6,4);
SELECT CASE WHEN LENGTH(telephone_number)=10
THEN Do Something
ELSE DEfault
END
FROM YOURTABLE;
----------
PS:這是一個武斷的解決方案。
我會使用CONCAT,SUBSTR函數來代替「做某事」 – Teja 2012-03-09 03:49:38
我當然希望你正在處理與美國(假設從你的例子)電話號碼只。一旦你開始走向國際,事情變得艱難。我也希望變化只是你說的兩個... 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以外的其他代碼中清理它們。
所有數字都是美國,波多黎各。 – 2012-03-09 15:08:15
SQLite沒有SUBSTRING或CHARINDEX。它有SUBSTR,但不知道什麼是CHARINDEX – 2012-03-09 18:33:24
對不起,我沒有注意到SQLite的要求。 CHARINDEX只是一個函數,用於在字符串中的每個位置都從1到長度編號時定位字符串中的字符。我還沒有在SQLite中找到類似的功能。 – Griffin 2012-03-15 03:27:50
你可以通過使用長度函數來使用case語句... – Teja 2012-03-09 03:46:15