ne farkı var ben anlamadım tam olarak?
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
ahah evet aynı şeyi söylemişsin aslında? herhangi bir kolonda geçiyor mu diye mi bakmak istiyosun acaba?
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.
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
------------------
|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, 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ü.
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.
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.
SQL Server kullanıyorum.
stackoverflow.com
Bu linkteki son cevapmış arkadaşlar. Direk ters çeviriyoruz.
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.
Döndürmeyecek zaten. Bir önceki mesajda yazmıştım. "Ahmet Memo Hasan" için o kaydı döndürmeli.
bugun de biseyler ogrendik.
Ben de bu kadar kolay olabileceğini düşünmediğim için denememiştim bile.