programing

전날의 모든 행을 선택하는 SQL 문

stoneblock 2023. 4. 19. 21:54

전날의 모든 행을 선택하는 SQL 문

하나의 테이블에서 전날의 모든 행을 선택할 수 있는 좋은 SQL 문을 찾고 있습니다.테이블에는 datetime 열이 1개 있습니다.SQL Server 2005를 사용하고 있습니다.

지금 바로 입수:

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)

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())

분명한 답이 빠진 것 같다.열(Datetime Column)이 타임스탬프가 있는 날짜인 테이블(Table)에서 모든 데이터를 가져오려면 다음 쿼리를 사용할 수 있습니다.

SELECT * FROM Ttable
WHERE DATEDIFF(day,Ttable.DatetimeColumn ,GETDATE()) = 1 -- yesterday

이것은 오늘, 지난달, 작년 등으로 쉽게 변경될 수 있습니다.

SELECT * from table_name where date_field = DATE_SUB(CURRENT_DATE(),INTERVAL 1 DAY);

정말 오래된 이야기지만, 제 생각은 이렇습니다.두 개의 다른 절이 아니라 하나는 더 크고 하나는 더 작습니다.A 날짜에서 레코드를 선택할 때 아래의 구문을 사용합니다.날짜 범위를 원하는 경우 이전 답변이 좋습니다.

SELECT * FROM TABLE_NAME WHERE 
DATEDIFF(DAY, DATEADD(DAY, X , CURRENT_TIMESTAMP), <column_name>) = 0

위의 경우 X는 어제의 기록에 대해 -1이 됩니다.

이것으로 충분합니다.

WHERE `date` = CURDATE() - INTERVAL 1 DAY

지금은 테스트할 수 없지만:

select * from tablename where date >= dateadd(day, datediff(day, 1, getdate()), 0) and date < dateadd(day, datediff(day, 0, getdate()), 0)

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월 1일에도 잘 작동하지 않을 것이다.하지만 즉석에서 그것은 효과적이다.

날짜/시간 열을 현재까지 캐스팅하고 비교하는 것보다 쉽습니다.

SELECT * FROM TABLE_NAME WHERE cast(COLUMN_NAME as date) = 
   dateadd(day,0, convert(date, getdate(), 105)) 

간단한 대안

Select GETDATE() - 1

1을 변경하여 그 일수를 되돌립니다.

PS : 타임스탬프의 정확성을 얻을 수 있습니다.

이 방법은 효과가 있었습니다.

SELECT * FROM mytable WHERE date(mydate) = DATE_SUB(CURDATE(), INTERVAL 1 DAY);

subdate(now()),1은 어제의 타임스탬프를 반환한다.아래 코드는 어제의 타임스탬프가 있는 모든 행을 선택합니다.

Select * FROM `login` WHERE `dattime` <= subdate(now(),1) AND `dattime` > subdate(now(),2)

언급URL : https://stackoverflow.com/questions/1503298/sql-statement-to-select-all-rows-from-previous-day