2013-07-29 58 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 
相关问题