[]
[SQL] String Eşleştirme
Bir kolonda belli bir string içeren satırları bulmak için "like '%text%'" yapıyoruz. Tam tersini, yani elimizdeki string, bir kolondaki kelimelerden birini içeriyor mu sorgusunu nasıl yaparız? Pratik bir yolu var mı? Soru anlaşılmıştır umarım.
ne farkı var ben anlamadım tam olarak?
- selam (06.01.15 10:49:44)
cursor'la boşluk karakterine göre kelimeleri parse et. query'de OR'la like diyerek ara.
daha pratik bi yolu, belki bunun için bir function olabilir. to : google
daha pratik bi yolu, belki bunun için bir function olabilir. to : google
- widee (06.01.15 10:51:21)
ahah evet aynı şeyi söylemişsin aslında? herhangi bir kolonda geçiyor mu diye mi bakmak istiyosun acaba?
- tepedeki psychedelic adam (06.01.15 10:51:28)
Yani elimizdeki string atıyorum, "Ali Veli Ahmet Mehmet". Tabloda da isim kolonunda da "Ali", "Ali Veli", "Veli Ahmet" gibi stringler içeren satırları çekmek istiyorum.
- arnold schwarzeneger (06.01.15 10:55:07)
mysql'dir diye tahmin ediyorum;
SELECT * FROM tablo WHERE name REGEXP 'ali|veli|ahmet|mehmet';
ali veya veli veya ahmet veya mehmet var mı diye bakıyor.
dev.mysql.com
SELECT * FROM tablo WHERE name REGEXP 'ali|veli|ahmet|mehmet';
ali veya veli veya ahmet veya mehmet var mı diye bakıyor.
dev.mysql.com
- selam (06.01.15 11:17:17)
------------------
|Kolon_Adi |
-----------------|
|Ali |
|Ali Veli Memo |
|Veli Memo Alim |
|Meme |
------------------
"select * from tablo where kolon_adi like '%ali%' " gibi bir sorgu attiginizda zaten kolon_adi kolonundaki verisi "ali" ifadesini iceren tum satirlari dondurur. yani 1,2 ve 3. satirlari.
ama notepad uzerindeki ctrl+f tarzi bir arama yapmak istiyorsan, yani atiyorum tablonun kolon isimleri belli olmadigi bir senaryoda, o zaman bir script yazmak gerekebilir. tablonun sys.Columns ogelerini datatype'i '%char%' olacak sekilde cektikten sonra, cursor kullanarak elde ettigin sonucu senin istedigin parmetreler dahilinde (where kolon like '%ali%') tekrar filtre edip baska bir tabloya ya da view'e yazdirabilirsin. uzun is sanki.
daha pratik yolunu bilen varsa soylesin biz de ogrenelim.
edit: ne guzel resim cizmistim ya.. :(
|Kolon_Adi |
-----------------|
|Ali |
|Ali Veli Memo |
|Veli Memo Alim |
|Meme |
------------------
"select * from tablo where kolon_adi like '%ali%' " gibi bir sorgu attiginizda zaten kolon_adi kolonundaki verisi "ali" ifadesini iceren tum satirlari dondurur. yani 1,2 ve 3. satirlari.
ama notepad uzerindeki ctrl+f tarzi bir arama yapmak istiyorsan, yani atiyorum tablonun kolon isimleri belli olmadigi bir senaryoda, o zaman bir script yazmak gerekebilir. tablonun sys.Columns ogelerini datatype'i '%char%' olacak sekilde cektikten sonra, cursor kullanarak elde ettigin sonucu senin istedigin parmetreler dahilinde (where kolon like '%ali%') tekrar filtre edip baska bir tabloya ya da view'e yazdirabilirsin. uzun is sanki.
daha pratik yolunu bilen varsa soylesin biz de ogrenelim.
edit: ne guzel resim cizmistim ya.. :(
- trolleybus (06.01.15 11:23:51 ~ 11:24:30)
trolleybus, durum şu;
------------------
|Kolon_Adi |
-----------------|
|Ali |
|Veli |
|Memo Hasan|
|Meme |
------------------
Benim elimde "Ali Veli" diye bir string var. Ben 1 ve 2. satırlar gelsin istiyorum. Bu arada kelime bazında da düşünmeyin. "Ahmet Memo Hasan" için de 3. satır gelmeli. Yani standark LIKE olayının ters yönlüsü.
------------------
|Kolon_Adi |
-----------------|
|Ali |
|Veli |
|Memo Hasan|
|Meme |
------------------
Benim elimde "Ali Veli" diye bir string var. Ben 1 ve 2. satırlar gelsin istiyorum. Bu arada kelime bazında da düşünmeyin. "Ahmet Memo Hasan" için de 3. satır gelmeli. Yani standark LIKE olayının ters yönlüsü.
- arnold schwarzeneger (06.01.15 11:31:57)
oncelikle mysql kullaniyorsan arama islemleri ile ilgili once surayi incelemeni tavsiye ederim.
dev.mysql.com
ayrica yaptigin iste istedigin seyi yanlis yoldan yapiyormussun hissine kapildim. amacin ne oldugunu daha acik yazarsan belki baska birsey dusunulebilir.
dev.mysql.com
ayrica yaptigin iste istedigin seyi yanlis yoldan yapiyormussun hissine kapildim. amacin ne oldugunu daha acik yazarsan belki baska birsey dusunulebilir.
- wishmaster (06.01.15 11:38:45)
bunun pratik bir yolu yok. kendin nasıl kullanmayı düşünüyosan bi fonksiyon oluşturup içinde like'larla or'larla select edip döndürürsün her seferinde de bu fonksiyonu çağırırsın. ama like da işte kayıt sayısı büyüdükçe daha yavaş çalışır. belki de şu andaki problemine başka bi çözüm bulman gerekir.
- tepedeki psychedelic adam (06.01.15 11:40:31)
SQL Server kullanıyorum.
stackoverflow.com
Bu linkteki son cevapmış arkadaşlar. Direk ters çeviriyoruz.
stackoverflow.com
Bu linkteki son cevapmış arkadaşlar. Direk ters çeviriyoruz.
- arnold schwarzeneger (06.01.15 11:43:01)
bu şekilde işini gördü mü peki? bende beklediğim şeyi döndürmedi mesela.
yani mesela "Memo Hasan" kayıtlı satırı döndürmüyor şu şekilde yaparsan.
Select * from tablo
where 'Memo Ahmet Mehmet' LIKE CONCAT('%',kolon,'%')
edit: tamam ben yanlış anlamışım demek.
yani mesela "Memo Hasan" kayıtlı satırı döndürmüyor şu şekilde yaparsan.
Select * from tablo
where 'Memo Ahmet Mehmet' LIKE CONCAT('%',kolon,'%')
edit: tamam ben yanlış anlamışım demek.
- tepedeki psychedelic adam (06.01.15 11:53:43 ~ 11:57:33)
Döndürmeyecek zaten. Bir önceki mesajda yazmıştım. "Ahmet Memo Hasan" için o kaydı döndürmeli.
- arnold schwarzeneger (06.01.15 11:55:46)
bugun de biseyler ogrendik.
- trolleybus (06.01.15 12:01:59)
Ben de bu kadar kolay olabileceğini düşünmediğim için denememiştim bile.
- arnold schwarzeneger (06.01.15 12:04:54)
1