Saya mencari Pernyataan SQL yang bagus untuk memilih semua baris dari hari sebelumnya dari satu tabel. Tabel tersebut memiliki satu kolom datetime. Saya menggunakan SQL Server 2005.
Saya mencari Pernyataan SQL yang bagus untuk memilih semua baris dari hari sebelumnya dari satu tabel. Tabel tersebut memiliki satu kolom datetime. Saya menggunakan SQL Server 2005.
Jawaban:
dapatkan hari ini tidak ada waktu:
SELECT dateadd(day,datediff(day,0,GETDATE()),0)
dapatkan waktu kemarin:
SELECT dateadd(day,datediff(day,1,GETDATE()),0)
kueri untuk semua baris hanya dari kemarin:
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)saya mendapatkan:2016-02-01 10:27:54.733 2016-01-31 00:00:00.000
Untuk mendapatkan nilai "hari ini" di SQL:
convert(date, GETDATE())
Untuk mendapatkan "kemarin":
DATEADD(day, -1, convert(date, GETDATE()))
Untuk mendapatkan "hari ini dikurangi X hari": ubah -1 menjadi -X.
Jadi untuk semua baris kemarin, Anda mendapatkan:
select * from tablename
where date >= DATEADD(day, -1, convert(date, GETDATE()))
and date < convert(date, GETDATE())
Sepertinya jawaban yang jelas hilang. Untuk mendapatkan semua data dari tabel (Ttable) di mana kolom (DatetimeColumn) adalah datetime dengan stempel waktu, kueri berikut dapat digunakan:
SELECT * FROM Ttable
WHERE DATEDIFF(day,Ttable.DatetimeColumn ,GETDATE()) = 1 -- yesterday
Ini dapat dengan mudah diubah menjadi hari ini, bulan lalu, tahun lalu, dll.
DatetimeColumn BETWEEN DATEADD(day, DATEDIFF(day, 1, GETDATE()) ,0) AND DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)karena harus mengevaluasi DATEDIFF () pada setiap baris
SELECT * from table_name where date_field = DATE_SUB(CURRENT_DATE(),INTERVAL 1 DAY);
Ini adalah utas yang sangat tua, tapi inilah pendapat saya. Daripada 2 klausa yang berbeda, satu lebih besar dari dan kurang dari. Saya menggunakan sintaks di bawah ini untuk memilih catatan dari tanggal A. Jika Anda menginginkan rentang tanggal maka jawaban sebelumnya adalah cara yang tepat.
SELECT * FROM TABLE_NAME WHERE
DATEDIFF(DAY, DATEADD(DAY, X , CURRENT_TIMESTAMP), <column_name>) = 0
Dalam kasus di atas, X akan menjadi -1 untuk catatan kemarin
Ini harus melakukannya:
WHERE `date` = CURDATE() - INTERVAL 1 DAY
Di SQL Server, lakukan seperti ini:
where cast(columnName as date) = cast(getdate() -1 as date)
Anda harus mentransmisikan kedua sisi ekspresi hingga saat ini untuk menghindari masalah dengan pemformatan waktu.
Jika Anda perlu mengontrol interval lebih detail, maka Anda harus mencoba sesuatu seperti:
declare @start datetime = cast(getdate() - 1 as date)
declare @end datetime = cast(getdate() - 1 as date)
set @end = dateadd(second, 86399, @end)
Cara lain untuk mengatakannya "Kemarin" ...
Select * from TABLE
where Day(DateField) = (Day(GetDate())-1)
and Month(DateField) = (Month(GetDate()))
and Year(DateField) = (Year(getdate()))
Ini mungkin tidak akan bekerja dengan baik pada tanggal 1 Januari, dan juga pada hari pertama setiap bulan. Tapi dengan cepat itu efektif.
Nah, lebih mudah untuk mentransmisikan kolom tanggal waktu ke tanggal dan daripada membandingkan.
SELECT * FROM TABLE_NAME WHERE cast(COLUMN_NAME as date) =
dateadd(day,0, convert(date, getdate(), 105))
subdate (now (), 1) akan mengembalikan cap waktu kemarin Kode di bawah ini akan memilih semua baris dengan cap waktu kemarin
Select * FROM `login` WHERE `dattime` <= subdate(now(),1) AND `dattime` > subdate(now(),2)
SELECT *akan mengembalikan tanggal dengan waktu aslinya.