programing

SQL: 타임스탬프 날짜에서 1일 빼기

powerit 2023. 5. 3. 21:57
반응형

SQL: 타임스탬프 날짜에서 1일 빼기

저는 Postgresql용 Datagrip을 사용하고 있습니다.날짜 필드가 타임스탬프 형식인 테이블이 있습니다.(ex: 2016-11-01 00:00:00)다음을 수행할 수 있기를 바랍니다.

  1. 수학 연산자를 적용하여 1일 빼기
  2. 오늘-130일의 시간 창을 기준으로 필터링합니다.
  3. 스탬프의 hh/mm/ss 부분 없이 표시(2016-10-31)

현재 시작 쿼리:

select org_id, count(accounts) as count, ((date_at) - 1) as dateat 
from sourcetable 
where  date_at <= now() - 130
group by org_id, dateat

((date_at)-1)1행의 절은 다음과 같습니다.

[42883] 오류: 연산자가 존재하지 않습니다. 시간대가 없는 타임스탬프 - 정수 힌트: 지정된 이름과 인수 유형과 일치하는 연산자가 없습니다.명시적 유형 캐스트를 추가해야 할 수 있습니다.위치: 69

now()절은 유사한 메시지를 생성합니다.

[42883] 오류: 연산자가 존재하지 않습니다. 시간대가 있는 타임스탬프 - 정수 힌트: 지정된 이름과 인수 유형과 일치하는 연산자가 없습니다.명시적 유형 캐스트를 추가해야 할 수 있습니다.위치: ...

유형 캐스트에 대한 온라인 가이드는 특별히 도움이 되지 않습니다.입력해 주셔서 감사합니다.

사용INTERVAL타자를 치다예:

--yesterday
SELECT NOW() - INTERVAL '1 DAY';

--Unrelated: PostgreSQL also supports some interesting shortcuts:
SELECT 
    'yesterday'::TIMESTAMP, 
    'tomorrow'::TIMESTAMP, 
    'allballs'::TIME AS aka_midnight;

그러면 다음을 수행할 수 있습니다.

SELECT 
    org_id,
    count(accounts) AS COUNT,
    ((date_at) - INTERVAL '1 DAY') AS dateat
FROM 
    sourcetable
WHERE 
    date_at <= now() - INTERVAL '130 DAYS'
GROUP BY 
    org_id,
    dateat;

팁들

팁 1

피연산자를 여러 개 추가할 수 있습니다.예: 현재 달의 마지막 날을 얻는 방법은 무엇입니까?

SELECT date_trunc('MONTH', CURRENT_DATE) + INTERVAL '1 MONTH - 1 DAY';

팁 2

다음을 사용하여 구간을 만들 수도 있습니다.make_interval함수, 런타임에 함수를 만들어야 할 때 유용합니다( 리터럴을 사용하지 않음).

SELECT make_interval(days => 10 + 2);
SELECT make_interval(days => 1, hours => 2);
SELECT make_interval(0, 1, 0, 5, 0, 0, 0.0);

추가 정보:

날짜/시간 함수 및 연산자

datatype-datetime(특수)입니다.

캐스팅할 수 있습니다.TIMESTAMP아주DATE당신이 뺄 수 있게 해주는 것.INTEGER그것으로부터.

예를 들어 어제를 가져오는 경우:

now()::DATE - 1

따라서 다음과 같은 질문을 할 수 있습니다.

SELECT org_id, date_at::DATE - 1 AS dateat, COUNT(accounts) AS count
FROM sourcetable 
WHERE date_at <= NOW()::DATE - 130
GROUP BY 1, 2

언급URL : https://stackoverflow.com/questions/46079791/sql-subtracting-1-day-from-a-timestamp-date

반응형