Jump to content
Forumu Destekleyenlere Katılın ×
Paticik Forumları
2000 lerden beri faal olan, çok şukela bir paylaşım platformuyuz. Hoşgeldiniz.

SQL 'de tarih işlemleri dün,bugün falan fistan


Öne çıkan mesajlar

Mesaj tarihi:
Selamlar daha önce çok zorlandığım hatta lanet ettiğim bu tarih işlemlerine taktım kafayı ve illa ki daha kolay bir yolu olduğuna inanıyorum.

Şimdi php'nin time() cinsinden tarihlerin tutulduğu bir sütunum var. Misal değer: 1302191055

Bunun karşılığı şu; 07-04-2011 18:44:15

Yapmak istediğim olay ise filtreleme yöntemi, değerlerim şunlar;

Bugün, Dün, Bu hafta, Geçen hafta, Bu ay, Geçen Ay, Tüm zamanlar

Ben bu sql kodunda bu değeri kullanarak yukarıda ki gibi filtreleme yöntemlerini yapabilir miyim?

edit: google amcaya sordum birkaç kere ama acayip karıştırmışlar yada tam karşılığını ŞUDUR diye veren olmamış açıkcası.
Mesaj tarihi:
Şimdi şu şekilde kodlar gördüm ben;

tdate >= convert(char(10),getdate()-1,126

Falan gibi yani;

SELECT sutunlar FROM tablo WHERE tdate >= convert(char(10),getdate()-1,126

Misal bunun gibi
Mesaj tarihi:
Kullandığın SQL sunucusunun SQL fonksiyonlarına bakcaksın. Mesela Ms SQL Server: http://msdn.microsoft.com/en-us/library/aa258863(v=sql.80).aspx

Bu fonksiyonlar standard değilse her SQL sunucusunda olmayabilir ama her sunucu bi şekilde bu tip fonksiyonlar sunuyodur™.
Mesaj tarihi:
DATE_FORMAT(UNIX_TIMESTAMP(reports.check_time), '%y%m%d') = '20110409'

Şu dahil 40'dan fazla şey denedim fonksiyonlarla ilgili yok yapamadım istediğimi.

reports.check_time >= date_sub(current_date, interval 0 day)

date_sub'un aldığı değer 2011-04-09 ama check_time'da ki değer unix formatında, ancak ve ancak bu check_time'ı öbür formata aldıgımda bile yemiyor bunu acaba yanlış mantık mı kuruyorum
Mesaj tarihi:
Zaten daha önce mesela dün ise dünün unix cinsinden değerini alıyodum sonra BETWEEN kullanarak yapıyodum ama uğraştırıyor. Dediğim gibi daha işlevsel daha kolay yolları var mı onları araştırıyorum
Mesaj tarihi:
Pluton said:
Şimdi php'nin time() cinsinden tarihlerin tutulduğu bir sütunum var. Misal değer: 1302191055

Bunun karşılığı şu; 07-04-2011 18:44:15


Bi saniye... veritabanında hangi tipte saklıyosun bunu?
Mesaj tarihi:
Çok uğratırdı vazgeçtim ya bildiğim gibi yaptım yine şu şekilde;

said:
$today = mktime(0,0,0,date('m'),date('d'),date('Y'));
$yesterday = mktime(0,0,0,date('m'),date('d')-1,date('Y'));
$last7day = mktime(0,0,0,date('m'),date('d')-7,date('Y'));
$this_month = mktime(0,0,0,date('m'),1,date('Y'));
$last_month = mktime(0,0,0,date('m')-1,1,date('Y'));
$next_month = mktime(0,0,0,date('m')+1,1,date('Y'));


said:
switch($date)
{
case(2): $dt = "AND (reports.check_time BETWEEN $yesterday AND $today)"; break;
case(3): $dt = "AND reports.check_time >= $last7day"; break;
case(4): $dt = "AND (reports.check_time BETWEEN $this_month AND $next_month)"; break;
case(5): $dt = "AND (reports.check_time BETWEEN $last_month AND $this_month)"; break;
case(6): $dt = NULL; break;
default: $dt = "AND reports.check_time >= $today"; break;
}


$dt değişkeninide sql sorgusuna kattık mı olay tamamlanıyor.
Mesaj tarihi:
Özel bi sebebin var mı tarihi int türünde tutmak için? Date türünde saklasan bu tür işlemleri hem daha rahat yaparsın, hem de işlem veritabanı tarafından optimize edileceği için daha efektif olur. Özel bi sebebi yoksa sorguyla ilgili işlemleri veritabanına yüklemek daha yararlı.
Mesaj tarihi:
Aslında vardı 2 sene önce evvel ama ne olduğunu unuttum o zamandan beri alışkanlık yapmış. Dediğin gibi tüm sütunları değiştireyim bari php'ye yaptırmakla olmayacak
Mesaj tarihi:
timespan olarak tutmak daha hizli oluyor malesef.

@pluton, uzun uzun cevap yazamiyorum tasinma halinde oldugum icin. psuedo anlatayim. bir gunu timespan olarak bulacaksin. now'in timestampini buna bolup round down yapacaksin, bu sana bugunun 1970'den beri kacinci gun oldugunu verecek. karsilastirmak istedigin zaman icin de ayni islemi yapacaksin. o da karsilastirmak istedigin gunun kacinci gun oldugunu verecek. bu iki sayiyi birbirinden cikarttigindaki fark 0'sa bugundur, 1'se dundur, vesaire.

ayni sekilde bir timespan'i gunun timespan'i yerine bir haftaya denk olan timespan'e bolersen 1970'den beri hangi haftasonu oldugunu bulursun. benzer sekilde ay vs icin tekrarlayabilirsin.

kod olarak da, diyelim ki ilk bolumu yaptin ve bugun x'inci gun ve sen son 24 saat yerine sadece son iki gundeki (dun + bugun) postlari almak istiyorsun.


select * from hedehodo where x - floor(timespan/<dayspan>) < 2


eger demek istedigini yanlis anlamiyorsam boyle yapiliyor.
×
×
  • Yeni Oluştur...