Bir tablodan önceki günden tüm satırları seçmek için iyi bir SQL İfadesi arıyorum. Tabloda bir tarih saat sütunu bulunur. SQL Server 2005 kullanıyorum.
Bir tablodan önceki günden tüm satırları seçmek için iyi bir SQL İfadesi arıyorum. Tabloda bir tarih saat sütunu bulunur. SQL Server 2005 kullanıyorum.
Yanıtlar:
bugün olsun hiç vakit yok:
SELECT dateadd(day,datediff(day,0,GETDATE()),0)
dün hiç vakit kaybetmeden:
SELECT dateadd(day,datediff(day,1,GETDATE()),0)
sadece dünden tüm satırlar için sorgu:
select
*
from yourTable
WHERE YourDate >= dateadd(day,datediff(day,1,GETDATE()),0)
AND YourDate < dateadd(day,datediff(day,0,GETDATE()),0)
SELECT getdate(),dateadd(day,datediff(day,1,GETDATE()),0)
şunu elde ederim:2016-02-01 10:27:54.733 2016-01-31 00:00:00.000
SQL'de "bugün" değerini almak için:
convert(date, GETDATE())
"Dün" almak için:
DATEADD(day, -1, convert(date, GETDATE()))
"Bugün eksi X gün" elde etmek için: -1'i -X olarak değiştirin.
Yani dünün tüm satırları için şunları elde edersiniz:
select * from tablename
where date >= DATEADD(day, -1, convert(date, GETDATE()))
and date < convert(date, GETDATE())
Görünüşe göre apaçık cevap eksikti. Sütunun (DatetimeColumn) bir zaman damgası olan bir tarih saat olduğu bir tablodan (Ttable) tüm verileri almak için aşağıdaki sorgu kullanılabilir:
SELECT * FROM Ttable
WHERE DATEDIFF(day,Ttable.DatetimeColumn ,GETDATE()) = 1 -- yesterday
Bu kolayca bugün, geçen ay, geçen yıl vb. Olarak değiştirilebilir.
DatetimeColumn BETWEEN DATEADD(day, DATEDIFF(day, 1, GETDATE()) ,0) AND DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)
her satırda DATEDIFF () değerini değerlendirmek zorunda olduğu için çok daha pahalı
SELECT * from table_name where date_field = DATE_SUB(CURRENT_DATE(),INTERVAL 1 DAY);
Bu gerçekten eski bir konu, ama işte benim onunla ilgili görüşüm. 2 farklı cümle yerine, bir büyüktür ve küçüktür. A tarihinden itibaren kayıtları seçmek için aşağıdaki sözdizimini kullanıyorum. Bir tarih aralığı istiyorsanız, önceki cevaplar gitmenin yoludur.
SELECT * FROM TABLE_NAME WHERE
DATEDIFF(DAY, DATEADD(DAY, X , CURRENT_TIMESTAMP), <column_name>) = 0
Yukarıdaki durumda X, dünün kayıtları için -1 olacaktır
Bunu yapmalı:
WHERE `date` = CURDATE() - INTERVAL 1 DAY
SQL Server'da şunu yapın:
where cast(columnName as date) = cast(getdate() -1 as date)
Saat formatlamayla ilgili sorunları önlemek için ifadenin her iki tarafını da bugüne kadar çevirmelisiniz.
Aralığı daha ayrıntılı olarak kontrol etmeniz gerekiyorsa, aşağıdaki gibi bir şey denemelisiniz:
declare @start datetime = cast(getdate() - 1 as date)
declare @end datetime = cast(getdate() - 1 as date)
set @end = dateadd(second, 86399, @end)
"Dün" demenin başka bir yolu ...
Select * from TABLE
where Day(DateField) = (Day(GetDate())-1)
and Month(DateField) = (Month(GetDate()))
and Year(DateField) = (Year(getdate()))
Bu muhtemelen 1 Ocak'ta ve her ayın ilk gününde iyi sonuç vermeyecektir. Ama anında etkilidir.
Tarih saat sütununu bugüne kadar dönüştürmek ve karşılaştırmaktan daha kolaydır.
SELECT * FROM TABLE_NAME WHERE cast(COLUMN_NAME as date) =
dateadd(day,0, convert(date, getdate(), 105))
alt tarih (şimdi (), 1) dünün zaman damgasını döndürecek Aşağıdaki kod, dünün zaman damgasını içeren tüm satırları seçecektir
Select * FROM `login` WHERE `dattime` <= subdate(now(),1) AND `dattime` > subdate(now(),2)
SELECT *
herhangi bir tarihi orijinal saatleriyle döndürür.