Выборка по первым трем буквам, разным датам рождения и дата в периоде

Необходимо найти по фамилии - по первым 3-м буквам, дата рождения должны быть не равны, дата F7 должна быть в периоде между F6 и F7.

Tаблица:

create table SEARCH (
  F1 VARCHAR2(1000),
  F2 VARCHAR2(1000),
  F3 VARCHAR2(1000),
  F4 VARCHAR2(1000),
  F5 VARCHAR2(1000),
  F6 VARCHAR2(1000),
  F7 VARCHAR2(1000),
  F8 VARCHAR2(1000)
)

Данные таблицы:

F1   F2             F3      F4              F5          F6          F7          F8  
115  ИВАНОВ         ИВАН    ИВАНОВИЧ        03.02.1961  04.04.2020  17.04.2020  G12
115  ИВАНОВА        ЗИНА    ИВАНОВНА        30.07.1989  04.04.2020  17.04.2020  K14   
110  ПЕТРОВ         ПЕТР    ИВАНОВИЧ        28.08.1984  23.04.2020  27.04.2020  Z14   
110  СИДОРОВ        ПЕТР    ИВАНОВИЧ        28.08.1955  23.05.2020  27.05.2020  Z16 

Нужен такой результат:

F1  F2          F3      F4              F5          F6          F7          F8  
115 ИВАНОВ      ИВАН    ИВАНОВИЧ        03.02.1961  04.04.2020  17.04.2020  G12
115 ИВАНОВА     ЗИНА    ИВАНОВНА        30.07.1989  04.04.2020  17.04.2020  K14 

Ответы (1 шт):

Автор решения: 0xdb

Дело в том, что даты в символьном виде можно сравнить на равенство или неравенство, но сравнение на больше-меньше даст скорее всего неверный результат, так как они сравниваются лексикографически, например, 01.01.2021 меньше чем 31.12.2020.

Лучше их коннвертировать в тип DATE до операции сравнения:

select *
from search s1
where exists (
    select 1 
    from search s2 
    where substr (s2.f2, 1, 3) = substr (s1.f2, 1, 3)
    and   s2.f5 != s1.f5
    and   to_date (s2.f7, 'dd.mm.yyyy') between to_date (s1.f6, 'dd.mm.yyyy') 
                                            and to_date (s1.f7, 'dd.mm.yyyy') 
)

Результат:

F1  F2       F3       F4       F5           F6           F7           F8 
--- -------- -------- -------- ------------ ------------ ------------ ---
115 ИВАНОВ   ИВАН     ИВАНОВИЧ 03.02.1961   04.04.2020   17.04.2020   G12
115 ИВАНОВА  ЗИНА     ИВАНОВНА 30.07.1989   04.04.2020   17.04.2020   K14
→ Ссылка