2013-07-29 3 views
1

На моем поле phone меня, как эти значения:Как заменить часть строки в MySQL?

Phone: 1234567 

То, что я хочу добиться того, чтобы заменить Phone: (есть пробел после : поэтому я могу быть только с номером я попытался следующие без. удачи

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

Я должен спросить, почему в колонке под названием 'phone' бы сохранить данные с текстом там так или иначе? – Dale

+0

@ Дале, у вас там хороший вопрос, однако мне пришлось иметь текст там по какой-то причине. – EnexoOnoma

+0

Является ли телефон: по всем результатам или только некоторым? – Anigel

ответ

1

Я обычно переименовывать возвращаемое значение как новое поле, в этом случае phone_replaced:

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

Но вы также можете сохранить текущее имя phone:

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

Пока вы кличка его с помощью as.

+1

+1 На самом деле вам не нужно переименовывать его, но вы должны, по крайней мере, его псевдоним, или он действительно возвращается как «REPLACE» (столбец «blah: ',' ')», и это просто кошмар для ввода – Dale

+0

True, I Я добавил его к моему ответу. –

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.

Для Replaceing: -

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 

Если вы хотите только "соответствие" линии, вы должны добавить соответствующий ИНЕК:

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 I думать. Если вам нужно, вы должны использовать регистр, нечувствительный к регистру для столбца 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 
Смежные вопросы