Как sql сравнивает дату, хранящуюся в типе данных varchar

Как производится сравнение двух дат, если обе они хранятся в 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.

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
0
45
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Сравните даты как даты. Храните дату/время, используя правильные форматы даты/времени. Не храните их как строки!

Ваш код, несомненно, удалит строки. Другой вопрос, удаляет ли он нужные вам строки. Логика, которую вы хотите, кажется:

delete from myTable
    where to_date(updated_date, 'DD-MM-YY') < trunc(sysdate) - 7;

разве это не будет накладными расходами каждый раз преобразовывать каждое значение строки в дату, а затем выполнять сравнение, поскольку эта операция удаления удаляет миллионы строк

Shweta 14.06.2019 13:11

@Швета. . . Конечно, это так (хотя и намного меньше, чем накладные расходы для фактического delete). Если бы вы сохранили значения, используя правильные типы данных, это не было бы проблемой.

Gordon Linoff 14.06.2019 14:12

На самом деле это очень старая таблица, и мы не можем внести в нее изменения.

Shweta 14.06.2019 14:21

Вы можете поместить функциональный индекс в столбец, чтобы сделать сравнение менее болезненным.

eaolson 15.06.2019 02:30

Другие вопросы по теме