복붙노트

[SQL] 어떻게 PostgreSQL의를 사용하여 이전 달의 마지막 날을 결정합니까?

SQL

어떻게 PostgreSQL의를 사용하여 이전 달의 마지막 날을 결정합니까?

오늘의 날짜와 이전 달의 마지막 날 내에 기록을 결정하기 위해 PostgreSQL 데이터베이스를 조회 할 필요가있다. 즉, 나는 12 월 31 일, 2011 오늘 사이에 내리는 모든 것을 검색하고 싶습니다. 그래서 다음 달, 매달 사용하는 재이 쿼리는 쿼리는 현재 날짜 1 월 31 일, 2012 년에 근거 할 것이다 될 것입니다.

나는이 옵션을 본 적이 있지만 나는 기능 (가능한 경우) 사용하지 않는 것이 원합니다.

해결법

  1. ==============================

    1.두 솔루션은 이전 달의 마지막 날을 포함하고 또한 "오늘"을 모두 포함한다.

    두 솔루션은 이전 달의 마지막 날을 포함하고 또한 "오늘"을 모두 포함한다.

    SELECT *
    FROM   tbl
    WHERE  my_date BETWEEN date_trunc('month', now())::date - 1
                   AND     now()::date
    

    당신은 일을 빼기 (그러나 타임 스탬프에서) 날짜에서 일반 정수 값을 뺄 수 있습니다. 이것은 가장 간단하고 빠른 방법입니다.

    SELECT *
    FROM   tbl
    WHERE  my_timestamp >= date_trunc('month', now()) - interval '1 day'
    AND    my_timestamp <  date_trunc('day'  , now()) + interval '1 day'
    

    참고 나는 ( "내일 전에"~) 정확한 결과를 얻기 위해 두 번째 조건에 대해 <연산자를 사용하는 것이.

    나는 두 번째 쿼리 날짜로 캐스팅하지 않습니다. 대신에 나는 앞뒤로과지지 않도록, 간격 '일일'을 추가합니다.

    설명서의 날짜 / 시간 형식과 기능에서보세요.

  2. ==============================

    2.이전 / 지난 달의 날짜를 얻는 경우 :

    이전 / 지난 달의 날짜를 얻는 경우 :

    SELECT (date_trunc('month', now())::date - 1) as last_month_date
    

    결과 : 2012년 11월 30일를

    이전 / 지난 달의 일수를 얻기 위해 :

    SELECT DATE_PART('days', date_trunc('month', now())::date - 1) last_month_days
    

    결과 : 30

  3. ==============================

    3.이 시도:

    이 시도:

    SELECT ...
    WHERE  date_field between (date_trunc('MONTH', now()) - INTERVAL '1 day')::date 
                          and now()::date 
           ...
    
  4. ==============================

    4.시험

    시험

    select current_date - cast((date_part('day', current_date) + 1) as int)
    
  5. ==============================

    5.한 달에 단지 일 http://wiki.postgresql.org/wiki/Date_LastDay 걸릴 및 반환에 수정

    한 달에 단지 일 http://wiki.postgresql.org/wiki/Date_LastDay 걸릴 및 반환에 수정

        CREATE OR REPLACE FUNCTION calc_days_in_month(date)
        RETURNS double precision AS
        $$
          SELECT EXTRACT(DAY FROM (date_trunc('MONTH', $1) + INTERVAL '1 MONTH - 1         day')::date);
        $$ LANGUAGE 'sql' IMMUTABLE STRICT;
    
    
        select calc_days_in_month('1999-05-01')
    

    반환 (31)

  6. ==============================

    6.참조는이 블로그에서 가져온 것입니다 :

    참조는이 블로그에서 가져온 것입니다 :

    당신은 아래와 같은 기능을 사용할 수 있습니다 :

    CREATE OR REPLACE FUNCTION fn_GetLastDayOfMonth(DATE)
    RETURNS DATE AS
    $$
        SELECT (date_trunc('MONTH', $1) + INTERVAL '1 MONTH - 1 day')::DATE;
    $$ LANGUAGE 'sql' 
    IMMUTABLE STRICT;
    

    샘플 실행 :

    SELECT *FROM fn_GetLastDayOfMonth(NOW()::DATE);
    
  7. from https://stackoverflow.com/questions/8944721/how-do-i-determine-the-last-day-of-the-previous-month-using-postgresql by cc-by-sa and MIT license