![]() |
|
Tarih alanı - Baskı Önizleme +- Delphi Can (https://www.delphican.com) +-- Forum: Delphi (https://www.delphican.com/forumdisplay.php?fid=3) +--- Forum: Mobil Platform - FireMonkey (FMX) (https://www.delphican.com/forumdisplay.php?fid=7) +--- Konu Başlığı: Tarih alanı (/showthread.php?tid=4186) |
Tarih alanı - BGNew - 19-11-2019 Merhaba; Bir tedit ile databasede bir çok alanda arama yapıyorum. Fakat aynı tedit ile tarih arama işleminde sonuç alamıyorum. Bu tarih alanıyla ilgili sorunu nasıl çözerim? Database: mysql Delphi Berlin Database tarih alan örneği: 19.11.2019 olarak kaydediyorum.
FDQ.SQL.Clear;
FDQ.SQL.Add('Select * From HAVUZ');
FDQ.SQL.Add('Where BASLIK Like ' + QuotedStr('%' + SearchBoxHavuz.Text + '%'));
FDQ.SQL.Add('Or DETAY Like ' + QuotedStr('%' + SearchBoxHavuz.Text + '%'));
FDQ.SQL.Add('Or USER Like ' + QuotedStr('%' + SearchBoxHavuz.Text + '%'));
FDQ.SQL.Add('Or TARIH Like ' + QuotedStr('%' + SearchBoxHavuz.Text + '%'));
FDQ.SQL.Add('Order By TARIH DESC, ID DESC LIMIT 300');
FDQ.Prepared := True;
Cvp: Tarih alanı - m_ekici - 20-11-2019 TARIH like yerine (MS SQL de bu şekilde kullanıyorum) FDQ.SQL.Add('OR TARIH Between CONVERT(DATETIME, '''+FormatDateTime('yyyy.mm.dd', strtodate(SearchBoxHavuz.Text) )+' 00:00:00'', 102) and CONVERT(DATETIME, '''+FormatDateTime('yyyy.mm.dd',strtodate(SearchBoxHavuz.Text))+' 23:59:59'', 102)');
Cvp: Tarih alanı - Fesih ARSLAN - 20-11-2019 (19-11-2019, Saat: 23:39)BGNew Adlı Kullanıcıdan Alıntı: Merhaba; Merhaba, Burada yapılmış olan kurguda ufak bir mantıksal sorun var. Tarih verisi içinde like ile arama nasıl bir ihtiyacı karşılıyor? Örneğin, 20.11.2019 olan bir veride "11.", "0.1" veya "19" gibi aramalar mı gerçekleşecek? Tarih alanı - Bay_Y - 20-11-2019 Fesih Hocam Güzel bir konuya değinmiş sanırım tarih içindeki "like" bir işe yaramıyor , tarih içinde ay , yıl ve güne göre arama yapmak istiyorsanız bununla ilgili MySQL de tarih , Ay ve gün için özel fonksiyonlar var. Ay için MONTH(Tarih) Gun için DAY(Tarih) Yıl için YEAR(Tarih) yukarıdaki fonksiyonaları tarihinize eşitleyerek arama yapabilirsiniz. Daha fazla bilgi için aşağıdaki linke bakabilirsiniz. https://www.w3resource.com/mysql/date-and-time-functions/mysql-month-function.php#:~:targetText=MONTH()%20function,for%20the%20date%20is%200.&targetText=Where%20date1%20is%20a%20date.&targetText=The%20following%20statement%20will%20return,date%202009%2D05%2D18. Tarih alanı - frmman - 20-11-2019 Konuya mantık açısından cevaplar yukarıda verilmiş bende mevcut şartlarda nasıl yapılır kısmına cevap vermeye çalışayım. Genel bir arama arayüzü ile (tedit) database tarafında birden fazla alanda uyan kayıtlar listelenmek isteniyor. Tarih alanında LIKE parametresinin sonuç getirmemesinin nedeni database de datetime tipindeki kayıtlarda string karşılaştırma yaparak eşleşen kayıtlar aranıyor. Yanlış hatırlamıyorusam mysql in varsayılan datetime kayıt formatı "2019-11-20 12:30:50" şeklinde. Kullanıcı zaman araması yapmak istediğinde bu formata göre (stringmiş gibi düşünüp) dikkat ederek girmesi (bu herzaman mümkün olmaz birden fazla kişi bu arayüzü kullanıyorsa) veya sizin arama yapılacak metni analiz edip eğer aranan kelime herhangi bir formatta tarih içeriyorsa girilen metni databasedeki datetime tipine göre formatlayıp sorgu içerisinde öyle kullanmanız gerekmektedir. Kullanıcı 20.11.2019 gibi bir değer girdiğinde WHERE zaman like '%20.11.2019%'haliyle eşleşen kayıt bulunamayacaktır. Kullanıcı 2019-11-20 şeklinde giriş yaptığında bu tarihdeki kayıtlar listelenecektir. WHERE zaman like '%2019-11-20%' Sorgu denemelerinizi, delphi tarafında değil herhangi bir mysql managment programında (Mysql Workbench vb) denemeniz nerede hata yaptığınızı görmeniz açısından faydalı olacaktır. Cvp: Tarih alanı - BGNew - 20-11-2019 Cevaplar için teşekkür ederim. Like'nin tarih alanında kullanılamadığını biliyorum, fakat bir tedit ile bir çok alanda aynı alanda arama yapmak gerek olduğu için like ile çözebileceğimi düşündüm. |