Відповіді:
отримати сьогодні немає часу:
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 *повернення будь-яких дат із початковим часом.