2013-07-29 106 views
1

在我的領域phone我有這樣的價值觀:如何替換MySQL中的一部分字符串?

Phone: 1234567 

我想實現的是更換Phone:(有:後的空間,所以我可以用數字只有我嘗試沒有以下。運氣

SELECT REPLACE(phone, 'Phone: ', '') 
FROM EVENTS 
+0

我要問,爲什麼在列名爲'phone'你會用文字保存在那裏的數據無論如何? – Dale

+0

@Dale你有一個很好的問題,但是我不得不在那裏有文本的原因。 – EnexoOnoma

+0

是電話號碼:所有結果還是僅僅一些? – Anigel

回答

1

我通常返回值重命名爲一個新的領域,在這種情況下phone_replaced

SELECT REPLACE(`phone`, 'Phone: ', '') as `phone_replaced` FROM `events` 

但你也可以保持當前的名稱phone:你的別名它使用as

SELECT REPLACE(`phone`, 'Phone: ', '') as `phone` FROM `events` 

只要。

+1

+1你實際上並沒有將其重命名,但必須別名,它至少還是它的實際返回'REPLACE(列,「胡說:」,「」)',這只是一個噩夢鍵入 – Dale

+0

真的,我已經添加到我的答案。 –

0

您可以通過使用PHP來實現它。使用方法:

$phone = "Phone: 1234567" 
$arr = explode(" ",$phone); 
$phone = $arr[1]; 

或者使用SQL語法:

SELECT REPLACE("Phone: 1234567", 'Phone: ', '') FROM EVENTS 
+0

這將爲只有一個電話號碼工作,但是我有手機 – EnexoOnoma

+0

@Kaoukkos我已經給了其他的解決辦法也很多行。 –

0

你試試: -

SELECT LTRIM(phone) FROM EVENTS; 

瞭解更多關於LTRIM

對於保換: -

SELECT REPLACE(phone,phone,LTRIM(phone)) FROM EVENTS; 

希望它會幫助你。

1

這其實工作原理:

create table T (data char(40)); 
insert into T values 
('Phone: 1235678'), 
('Tel: 0505074455'), 
('Phone: 0418192244'); 

select REPLACE(data, 'Phone: ','') from T; 

結果:

REPLACE(DATA, 'PHONE: ','') 
1235678 
Tel: 05-05-07-44-55 
0418192244 

如果你只是想 「匹配」 行,你應該添加相關的where子句:

select REPLACE(data, 'Phone: ','') from T 
    where data LIKE 'Phone: %'; 

如果您真的想要號碼你可以用CAST ... as DECIMAL

select CAST(REPLACE(data, 'Phone: ','') as DECIMAL) from T 
    where data LIKE 'Phone: %'; 

如果你要處理的情況下,儘量使用標準化的LOWER字符串:

select CAST(REPLACE(LOWER(data), 'phone: ','') as DECIMAL) from T 
    where LOWER(data) LIKE 'phone: %'; 

以後不會表現良好,因爲MySQL將無法使用潛力指數上data我認爲。如果需要,則應對data列使用不區分大小寫的排序規則。但那是另外一個故事......

http://sqlfiddle.com/#!2/38218d/7

0

確保名稱是大小寫敏感這裏這麼Phone:不一樣phone:

 SELECT case when phone like 'phone%' then REPLACE(phone, 'phone: ', '') 
       when phone like 'Phone%' then REPLACE(phone, 'Phone: ', '') 
      end as Phone_number 
    FROM EVENTS 
相關問題