Имеется таблица с днями рождения клиентов. Необходимо написать запрос, который позволит получить список клиентов, у которых в ближайшие 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