답변:
오늘은 시간이 없다 :
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())
분명한 대답이 누락 된 것 같습니다. 열 (DatetimeColumn)이 타임 스탬프가있는 datetime 인 테이블 (Ttable)에서 모든 데이터를 가져 오려면 다음 쿼리를 사용할 수 있습니다.
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 ()를 평가해야 하기 때문에 훨씬 더 비쌉니다
이렇게해야합니다.
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 월 1 일과 매월 1 일에는 잘 작동하지 않을 것입니다. 그러나 즉석에서 효과적입니다.
글쎄, datetime 열을 날짜로 캐스팅하고 비교하는 것이 더 쉽습니다.
SELECT * FROM TABLE_NAME WHERE cast(COLUMN_NAME as date) =
dateadd(day,0, convert(date, getdate(), 105))
subdate (now (), 1) 어제 타임 스탬프를 반환합니다. 아래 코드는 어제 타임 스탬프가있는 모든 행을 선택합니다.
Select * FROM `login` WHERE `dattime` <= subdate(now(),1) AND `dattime` > subdate(now(),2)
SELECT *
원래 시간과 함께 모든 날짜를 반환합니다.