2013-07-29 9 views
1

Sur mon champ phone je comme ces valeurs:Comment remplacer une partie d'une chaîne dans MySQL?

Phone: 1234567 

Ce que je veux atteindre est de remplacer le Phone: (il y a un espace après : je ne peux être que le nombre que j'essayé ce qui suit sans. chance

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

Je dois demander pourquoi dans la colonne appelée 'phone' vous sauverait les données avec le texte là-dedans en tous cas? – Dale

+0

@Dale vous avez une bonne question là-bas, mais je devais avoir du texte là-bas pour une raison. – EnexoOnoma

+0

Est-ce que le téléphone: sur tous les résultats ou juste certains? – Anigel

Répondre

1

Je renomme habituellement la valeur retournée comme un nouveau champ, dans ce cas phone_replaced:

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

Mais vous pouvez aussi garder le nom actuel phone:

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

Tant que vous alias à l'aide as.

+1

+1 Vous n'avez pas besoin de le renommer, mais vous devez l'alias au moins ou il est retourné comme 'REPLACE (column, 'blah:', '')' et c'est juste un cauchemar pour taper – Dale

+0

True, je l'ai ajouté à ma réponse. –

0

Vous pouvez y parvenir en utilisant le PHP. Utilisez-le:

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

Ou utilisez la syntaxe SQL:

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

Cela fonctionnera pour un seul numéro de téléphone, mais j'ai de nombreuses lignes avec les téléphones – EnexoOnoma

+0

@ Kaoukkos J'ai donné l'autre solution aussi. –

0

Vous essayez: -

SELECT LTRIM(phone) FROM EVENTS; 

En savoir plus sur LTRIM.

Pour replaceing: -

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

espère que cela vous aidera.

1

Cela fonctionne réellement:

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

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

Résultat:

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

Si vous ne souhaitez que des lignes "correspondants", vous devez ajouter une pertinente clause where:

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

Si vous veux vraiment numéros vous pourriez utiliser CAST ... as DECIMAL

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

Si vous devez traiter le cas, essayez de normaliser la chaîne en utilisant LOWER:

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

plus tard ne peut pas bien parce que MySQL ne sera pas en mesure d'utiliser l'indice potentiel sur data I pense. Si vous en avez besoin, vous devez utiliser un classement insensible à la casse pour la colonne data. Mais c'est une autre histoire ...

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

0

assurez-vous que les noms sont sensibles à la casse ici si Phone: n'est pas identique à 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 
Questions connexes