Как получить счет текущего месяца в воскресенье в psql?

Как получить общее количество воскресенья за указанную дату в postgresql

Общее количество воскресений за данную дату может быть только 0 или 1.

Но если вы хотите количество воскресений в пределах заданного диапазона дат, тогда ваш лучший выбор – таблица календаря. Чтобы узнать, сколько воскресений в феврале этого года, я бы просто

select count(*) from calendar where cal_date between '2011-02-01' and '2011-02-28' and day_of_week = 'Sun'; 

или

 select count(*) from calendar where year_of_date = 2011 and month_of_year = 2 and day_of_week = 'Sun'; 

Вот базовая таблица календаря, с которой вы можете начать. Я также включил функцию PostgreSQL для заполнения таблицы календаря. Я не тестировал это в 8.3, но я уверен, что я не использую никаких функций, которые не поддерживаются 8.3.

Обратите внимание, что части «dow» предполагают, что ваши дни находятся на английском языке. Но вы можете легко редактировать эти части, чтобы они соответствовали любому языку. (Я думаю, но я мог ошибаться «легко».)

 -- Table: calendar -- DROP TABLE calendar; CREATE TABLE calendar ( cal_date date NOT NULL, year_of_date integer NOT NULL, month_of_year integer NOT NULL, day_of_month integer NOT NULL, day_of_week character(3) NOT NULL, CONSTRAINT calendar_pkey PRIMARY KEY (cal_date), CONSTRAINT calendar_check CHECK (year_of_date::double precision = date_part('year'::text, cal_date)), CONSTRAINT calendar_check1 CHECK (month_of_year::double precision = date_part('month'::text, cal_date)), CONSTRAINT calendar_check2 CHECK (day_of_month::double precision = date_part('day'::text, cal_date)), CONSTRAINT calendar_check3 CHECK (day_of_week::text = CASE WHEN date_part('dow'::text, cal_date) = 0::double precision THEN 'Sun'::text WHEN date_part('dow'::text, cal_date) = 1::double precision THEN 'Mon'::text WHEN date_part('dow'::text, cal_date) = 2::double precision THEN 'Tue'::text WHEN date_part('dow'::text, cal_date) = 3::double precision THEN 'Wed'::text WHEN date_part('dow'::text, cal_date) = 4::double precision THEN 'Thu'::text WHEN date_part('dow'::text, cal_date) = 5::double precision THEN 'Fri'::text WHEN date_part('dow'::text, cal_date) = 6::double precision THEN 'Sat'::text ELSE NULL::text END) ) WITH ( OIDS=FALSE ); ALTER TABLE calendar OWNER TO postgres; -- Index: calendar_day_of_month -- DROP INDEX calendar_day_of_month; CREATE INDEX calendar_day_of_month ON calendar USING btree (day_of_month); -- Index: calendar_day_of_week -- DROP INDEX calendar_day_of_week; CREATE INDEX calendar_day_of_week ON calendar USING btree (day_of_week); -- Index: calendar_month_of_year -- DROP INDEX calendar_month_of_year; CREATE INDEX calendar_month_of_year ON calendar USING btree (month_of_year); -- Index: calendar_year_of_date -- DROP INDEX calendar_year_of_date; CREATE INDEX calendar_year_of_date ON calendar USING btree (year_of_date); 

И рудиментарная функция для заполнения таблицы. Я тоже не тестировал это в 8.3.

 -- Function: insert_range_into_calendar(date, date) -- DROP FUNCTION insert_range_into_calendar(date, date); CREATE OR REPLACE FUNCTION insert_range_into_calendar(from_date date, to_date date) RETURNS void AS $BODY$ DECLARE this_date date := from_date; BEGIN while (this_date <= to_date) LOOP INSERT INTO calendar (cal_date, year_of_date, month_of_year, day_of_month, day_of_week) VALUES (this_date, extract(year from this_date), extract(month from this_date), extract(day from this_date), case when extract(dow from this_date) = 0 then 'Sun' when extract(dow from this_date) = 1 then 'Mon' when extract(dow from this_date) = 2 then 'Tue' when extract(dow from this_date) = 3 then 'Wed' when extract(dow from this_date) = 4 then 'Thu' when extract(dow from this_date) = 5 then 'Fri' when extract(dow from this_date) = 6 then 'Sat' end); this_date = this_date + interval '1 day'; end loop; END; $BODY$ LANGUAGE plpgsql VOLATILE COST 100; 

Вам нужна ЭКСТРАКТА:

 SELECT EXTRACT(DOW FROM DATE '2011-02-16') = 0; -- 0 is Sunday 

Это может привести к истинному или ложному, это воскресенье, или это не так. Я понятия не имею, что вы подразумеваете под «общим числом», потому что это всегда будет 0 (дата не воскресенье) или 1 (данные данные – воскресенье).

Изменить: Что-то вроде этого?

 SELECT COUNT(*) FROM generate_series(timestamp '2011-01-01', '2011-03-01', '1 day') AS g(mydate) WHERE EXTRACT(DOW FROM mydate) = 0; 
  • Оптимизировать диапазон запросов времени печати Postgres
  • Первичные ключи с Apache Spark
  • Типы данных PostgreSQL и C #
  • Как создать индекс в поле json в Postgres 9.3
  • Падение базы данных postgresql через командную строку
  • Разрешение отклонено для отношения
  • MySQL против PostgreSQL? Какой я должен выбрать для своего проекта Django?
  • Postgres не удалось подключиться к серверу
  • Ошибка при получении: Ошибка аутентификации сверстников для пользователя «postgres» при попытке заставить pgsql работать с рельсами
  • Моделирование MySQL ORDER BY FIELD () в Postgresql
  • univot и PostgreSQL
  • Interesting Posts

    Как WinSCP может предоставить пользователю sudo для выполнения scp?

    Зачем использовать softmax в отличие от стандартной нормализации?

    Как проверить идентификатор отправителя электронной почты?

    Получить сгенерированный оператор SQL из объекта SqlCommand?

    Библиотека больших чисел в c ++

    Не удалось подключить PostgreSQL к удаленной базе данных с помощью pgAdmin

    Как запускать Jenkins для удаленного создания и передачи параметров

    как создать анимированный gif в .net

    objective C: SHA1

    Тип выборки по умолчанию для одного-к-одному, много-к-одному и один-ко-многим в спящем режиме

    Можно ли настраивать значки на панели задач? Если да, то как?

    Получить мастер-звук в c #

    Должен ли я использовать заставку или просто выключить монитор, когда закончите?

    Live CD с хорошим антивирусным программным обеспечением для сканирования / восстановления Windows?

    Ошибка Windows 10 DISM: 0x800f081f

    Давайте будем гением компьютера.