2016-02-11 2 views
1

Есть ли способ использовать выписку с даты в формате YYYY-MM-DD, сколько дней было в этом месяце?Как получить количество дней в месяце по дате?

пример:

для 2016-02-05 это даст 29 (февраль 2016 29 дней)

для 2016-03-12 это даст 31

для 2015-02-05 это даст 28 (февраль 2015 было 28 дней)

Я использую PostgreSQL

EDIT:

LAST_DAY function in postgres не то, что я ищу. она возвращает DATE в то время как я ожидаю, целое число

+0

Возможный дубликат функции [LAST \ _DAY в postgres] (http://stackoverflow.com/questions/14229038/last-day-function-in-postgres) – sagi

+0

@sagi это не отвечает мой вопрос. – java

+0

@java Возможный дубликат [Как получить количество дней в месяц в postgresql] (http://stackoverflow.com/questions/6927113/how-to-get-the-number-of-days-in-a -month-in-postgresql) –

ответ

2

Одним из способов достижения этой цели будет вычитать начало следующего месяца с начала текущего месяца:

db=> SELECT DATE_TRUNC('MONTH', '2016-02-05'::DATE + INTERVAL '1 MONTH') - 
      DATE_TRUNC('MONTH', '2016-02-05'::DATE); 
?column? 
---------- 
29 days 
(1 row) 
0

Вы можете попробовать следующий:

SELECT 
    DATE_PART('days', 
    DATE_TRUNC('month', TO_DATE('2016-02-05', 'YYYY-MM-DD')) 
    + '1 MONTH'::INTERVAL 
    - DATE_TRUNC('month', TO_DATE('2016-02-05', 'YYYY-MM-DD')) 
); 

Примечание: там дата используется дважды. И используемая функция преобразования TO_DATE

+1

Похоже на это [ответ] (http://stackoverflow.com/a/6927213/3682599) –

Смежные вопросы