Дни рождения клиентов

Имеется таблица с днями рождения клиентов. Необходимо написать запрос, который позволит получить список клиентов, у которых в ближайшие N дней от заданной даты будет день рождения.
Пример данных:

CREATE TABLE "T_CL" 
("ID" INTEGER,
 "NAME" VARCHAR2(256),
 "BIRTH_DAY" DATE
) NOLOGGING TABLESPACE MIRAVILD_DATA;
/

INSERT INTO t_cl
  (id, NAME, birth_day)
VALUES
  (1, 'Клиент 1', to_date('05.01.1965', 'dd.mm.yyyy'));
INSERT INTO t_cl
  (id, NAME, birth_day)
VALUES
  (2, 'Клиент 2', to_date('25.01.1976', 'dd.mm.yyyy'));
INSERT INTO t_cl
  (id, NAME, birth_day)
VALUES
  (3, 'Клиент 3', to_date('07.02.1978', 'dd.mm.yyyy'));
INSERT INTO t_cl
  (id, NAME, birth_day)
VALUES
  (4, 'Клиент 4', to_date('17.03.1979', 'dd.mm.yyyy'));
INSERT INTO t_cl
  (id, NAME, birth_day)
VALUES
  (5, 'Клиент 5', to_date('26.08.1979', 'dd.mm.yyyy'));
INSERT INTO t_cl
  (id, NAME, birth_day)
VALUES
  (6, 'Клиент 6', to_date('05.12.1962', 'dd.mm.yyyy'));

COMMIT WORK;
/

Результат при заданной дате 01.12.2014 и количестве дней 50:

SELECT t_cl.id, t_cl.name, t_cl.birth_day
  FROM t_cl
 WHERE to_char(t_cl.birth_day, 'DDD') NOT BETWEEN
       to_char(to_date('01.12.2014', 'DD.MM.YYYY') + 50, 'DDD') AND
       to_char(to_date('01.12.2014', 'DD.MM.YYYY'), 'DDD');
/

	ID	NAME		BIRTH_DAY
	1	Клиент 1	05.01.1965
	6	Клиент 6	05.12.1962

P.S.
Конфигурация СУБД — Oracle Database 11g Express Edition Release 11.2.0.2.0
IDE — PL/SQL Developer Version 11.0.6.1776

Tags: ,

Comments are closed.