Как производится сравнение двух дат, если обе они хранятся в varchar?
Я наткнулся на таблицу, написанную много лет назад, в которой дата (ДД-ММ-ГГ) хранится в varchar формат
updated_date varchar(255)
Существует сценарий, написанный для операции удаления следующим образом.
(Временная переменная)-
temp_date_tocompare varchar2(255) :=to_char(sysdate-7, 'YYYY-MM-DD')
delete from myTable
where updated_date < temp_date_tocompare;
Я выполнил это, и он отлично работает.
Но любопытно понять закулисную работу, как сравниваются эти varchars.


Сравните даты как даты. Храните дату/время, используя правильные форматы даты/времени. Не храните их как строки!
Ваш код, несомненно, удалит строки. Другой вопрос, удаляет ли он нужные вам строки. Логика, которую вы хотите, кажется:
delete from myTable
where to_date(updated_date, 'DD-MM-YY') < trunc(sysdate) - 7;
@Швета. . . Конечно, это так (хотя и намного меньше, чем накладные расходы для фактического delete). Если бы вы сохранили значения, используя правильные типы данных, это не было бы проблемой.
На самом деле это очень старая таблица, и мы не можем внести в нее изменения.
Вы можете поместить функциональный индекс в столбец, чтобы сделать сравнение менее болезненным.
разве это не будет накладными расходами каждый раз преобразовывать каждое значение строки в дату, а затем выполнять сравнение, поскольку эта операция удаления удаляет миллионы строк