如何在MySQL中替换部分字符串?

时间:2013-07-29 12:59:50

标签: php mysql

在我的字段phone上,我喜欢这些值:

Phone: 1234567

我想要实现的是替换Phone::后面有一个空格,所以我只能使用这个数字。我试过以下没有运气

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

5 个答案:

答案 0 :(得分:1)

我通常将返回的值重命名为新字段,在本例中为phone_replaced

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

但您也可以保留当前名称phone

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

只要您使用as对其进行别名。

答案 1 :(得分: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

答案 2 :(得分:0)

您可以使用PHP实现它。使用它:

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

或者使用SQL语法:

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

答案 3 :(得分:0)

你试试: -

SELECT LTRIM(phone) FROM EVENTS;

详细了解LTRIM

替换: -

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

希望它会对你有所帮助。

答案 4 :(得分: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