2009-01-09 21 views
8

Çalışan, adres, şehir, eyalet ve posta kodu sütunları içeren bir tablom var. Her alanı virgülle ayıran tek bir 'adres' adresine adres, şehir, eyalet, posta kodu birleştirdim.SQL'de virgül değiştirmek için sorgulama?

Sorunum, alanlardan biri boşsa, ek bir virgül eklenecektir. Örneğin, city boşsa, sonuç değeri address,,state,zipcode gibi olacaktır. Bu ekstra virgülü kaldırmalıyım. Bu nasıl yapılır? Lütfen yardım et. Hatta kapsayacak şekilde emin olmak için

UPDATE tableX SET address= replace(address, ',,', ',') 

N kez bunu yürütün: Değerler veritabanında zaten varsa

+0

hangi dili kullanıyorsunuz? – Irmantas

+0

-1: Neden dört farklı değer içeren tek bir sütun oluşturdunuz? –

+0

neden bunu yapmaya çalışıyorsun? Genellikle, boş (böylece boş olmalıdır) boş olması için ekstra virgül bırakmak için mantıklı. – aronchick

cevap

15

Sen bu şekilde yerine geçebilecek case when yapısını

... = case when city is null then '' else city + ',' end 

kullanabilirsiniz "tüm alanlar boş" durumda.

+0

Eminim REPLACE() her zaman tüm oluşumları değiştirir. En azından, tSQL ve MySQL içinde yapar, vanilya SQL standardının bir parçası olup olmadığından emin değilim. –

+0

Evet, ancak örneğin değiştir seçeneğini seçin (',,,', ',,', ','), – splattne

1

veya manuel php yapabilirsiniz Eğer ekleme için dize Concat zaman kendi dilinizde yapabilirsiniz inanıyoruz

<?php 

$str = 'address,,state,zipcode'; 

$str = preg_replace('/,{2,}/i', ',', $str); 
echo $str; 

?> 

çok

0

Kullanım değiştirin:

REPLACE('address,,state,zipcode', ',,' , ',') 
1
select replace(replace(replace(replace('LOKO, , , kkslksl ',' ',''),',','<>'),'><',''),'<>',',') from dual