[]

[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

  • 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
  • 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.. :(
  • 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ü.
  • 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.
  • 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.
  • 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.
  • 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
buraya yazılanların hakları Sir Anthony Hopkins'e aittir.
yazan eden compumaster, ilgilenen eden fader
modere edenler angelus, Artibir, aychovsky, baba jo, basond, compumaster, deckard, duyulmasi gerektigi kadar, fader, fraise, groove salad, kahvegibi, kaymaktutmayansicaksut, kibritsuyu, monstro, pandispanya, robin, ron dennis
bu sitede yazılanların hiçbiri doğru değildir. site içeriği küçükler için sakıncalı olabilir. yazılardan yazarları sorumludur. kaynak göstermeden alıntılanamaz. devlet tarafından atanmış bir kurumun internet üzerinde kimin hangi bilgiye ulaşıp ulaşamayacağına karar vermesi insan haklarına aykırıdır. web siteleri kullanıcıların istekleri doğrultusunda bağlandıkları yerlerdir. kullanıcılar isterlerse bir web sitesine bağlanmayabilirler. bu güçleri ve imkanları mevcuttur. bir kullanıcı bir siteye bağlanmak istiyorsa bu onun tercihi ve hakkıdır. bağlanmak istemiyorsa bu yine onun tercihi ve hakkıdır. halkın kendisine hizmet etmesi için görevlendirdiği kurumlar hadlerini aşıp halka neye ulaşıp ulaşmayacağını bilmeyen cahil cühela muamelesi edemezler. ebeveynlerin çocuklarını sakıncalı içeriklerden koruması için çok sayıda bedava ve ücretli yazılım mevcuttur. bu yazılımlar bir web tarayıcısını kullanmaktan daha karmaşık teknik bilgi gerektirmemektedir. devletin milletini küçük düşürmesi ve ebleh yerine koyması yasaktır. Skimlinks ile linkler üzerinden yönlendirme payı alınmaktadır.