Как установить приоритет формата даты «ММ / ДД / ГГГГ» над «ММ-ДД-ГГГГ» - PullRequest
0 голосов
/ 08 июля 2020

Как мне написать запрос в Teradata, чтобы, если поле Cont_Num дублировалось с разными форматами данных ('MM / DD / YYYY' и 'MM-DD-YYYY'), запрос должен был возвращать только поле с датой формат 'ММ / ДД / ГГГГ', но если нет дубликатов для Cont_Num и присутствует формат даты только 'ММ-ДД-ГГГГ', он должен вернуть это поле. Пример данных, которые у меня есть, ниже

SELECT Cont_Num,FILL_DATE, 
FROM USS_LOAD_LOG_TABLES.Members 
WHERE Cont_Num IN ( 
1807369967,
1807453269,
1916796684,
2015276712,
2001306287
)
ORDER BY Cont_Num,FILL_DATE;

РЕЗУЛЬТАТ

Cont_Num        FILL_DATE
1807369967  11-13-2018
1807369967  11/13/2018
1807453269  11-18-2018
1807453269  11/18/2018
1916796684  06-11-2019
1916796684  6/11/2019
2001306287  01-08-2020
2001306287  1/8/2020
2015276712  03-28-2020

ОЖИДАЕМЫЙ РЕЗУЛЬТАТ

РЕЗУЛЬТАТ

Cont_Num        FILL_DATE
1807369967  11/13/2018   
1807453269  11/18/2018
1916796684  6/11/2019
2001306287  1/8/2020
2015276712  03-28-2020

1 Ответ

0 голосов
/ 08 июля 2020

Конечно, вы должны попытаться исправить свою модель данных, дата должна храниться как DATE.

Вы можете добавить начальный ноль к одному di git день / месяц и удалить дефис / da sh для нормализации строк к общему формату, который можно использовать в ROW_NUMBER:

qualify
   row_number()
   over (partition by Cont_Num, RegExp_Replace(RegExp_Replace(FILL_DATE, '\b([\d])\b', '0\1'), '\D')
         order by case when FILL_DATE like '%/%' then 1 else 2 end) = 1

Надеюсь, используется только формат MMDDYYYY.

...