Відповіді:
отримати сьогодні немає часу:
SELECT dateadd(day,datediff(day,0,GETDATE()),0)
немає часу в наступний день:
SELECT dateadd(day,datediff(day,1,GETDATE()),0)
запит для всіх рядків лише з вчорашнього дня:
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)
отримую:2016-02-01 10:27:54.733 2016-01-31 00:00:00.000
Щоб отримати значення "сьогодні" в SQL:
convert(date, GETDATE())
Щоб отримати "вчора":
DATEADD(day, -1, convert(date, GETDATE()))
Щоб отримати "сьогодні мінус X днів": змініть -1 на -X.
Отже, за всі вчорашні рядки ви отримуєте:
select * from tablename
where date >= DATEADD(day, -1, convert(date, GETDATE()))
and date < convert(date, GETDATE())
Здається, очевидної відповіді не було. Щоб отримати всі дані з таблиці (Ttable), де стовпець (DatetimeColumn) є датою з позначкою часу, може бути використаний наступний запит:
SELECT * FROM Ttable
WHERE DATEDIFF(day,Ttable.DatetimeColumn ,GETDATE()) = 1 -- yesterday
Це можна легко змінити на сьогодні, минулий місяць, минулий рік тощо.
DatetimeColumn BETWEEN DATEADD(day, DATEDIFF(day, 1, GETDATE()) ,0) AND DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)
, що він повинен оцінювати DATEDIFF () для кожного ряду
SELECT * from table_name where date_field = DATE_SUB(CURRENT_DATE(),INTERVAL 1 DAY);
Це дійсно стара нитка, але ось я взяла на себе її. Замість 2 різних застережень, один більший та менший. Я використовую цей синтаксис нижче для вибору записів із дати. Якщо ви хочете діапазон дат, то попередні відповіді - це шлях.
SELECT * FROM TABLE_NAME WHERE
DATEDIFF(DAY, DATEADD(DAY, X , CURRENT_TIMESTAMP), <column_name>) = 0
У вищенаведеному випадку X буде -1 для записів вчорашнього дня
Це слід зробити:
WHERE `date` = CURDATE() - INTERVAL 1 DAY
У SQL Server роблять так:
where cast(columnName as date) = cast(getdate() -1 as date)
Ви повинні подати обидві сторони виразу, щоб уникнути проблем із форматуванням часу.
Якщо вам потрібно детальніше керувати інтервалом, то слід спробувати щось на кшталт:
declare @start datetime = cast(getdate() - 1 as date)
declare @end datetime = cast(getdate() - 1 as date)
set @end = dateadd(second, 86399, @end)
Ще один спосіб сказати це "Вчора" ...
Select * from TABLE
where Day(DateField) = (Day(GetDate())-1)
and Month(DateField) = (Month(GetDate()))
and Year(DateField) = (Year(getdate()))
Це, мабуть, не спрацює з 1 січня, як і першого дня кожного місяця. Але на льоту це ефективно.
Що ж, простіше віддати стовпчик дати на дату і порівняти.
SELECT * FROM TABLE_NAME WHERE cast(COLUMN_NAME as date) =
dateadd(day,0, convert(date, getdate(), 105))
SELECT *
повернення будь-яких дат із початковим часом.