SELECT
STR_TO_DATE('2020-01-03 17:35:48', GET_FORMAT(DATETIME,'ISO')) <
STR_TO_DATE('2020-02-01 00:00:00', GET_FORMAT(DATETIME,'ISO'));
GET_FORMAT(DATETIME,'ISO')
аналогично: %Y-%m-%d %H:%i:%s
, вы также можете сделать:
SELECT
STR_TO_DATE('2020-01-03 17:35:48', '%Y-%m-%d %H:%i:%s') <
STR_TO_DATE('2020-02-01 00:00:00', '%Y-%m-%d %H:%i:%s');
Получив DateTime
, вы можете сравнить их, используя все операторы: =
, <
, <=
, >
, >=
, !=
, BETWEEN
, ...
Примечание. Не храните дату / время в столбце VARCHAR
, поскольку :
- Вы не сможете использовать индексы,
STR_TO_DATE(mydate)
придется выполнять для каждой строки таблицы и приведет к полному сканированию таблицы. Индекс будет содержать mydate
, но не результат STR_TO_DATE(mydate)
, что означает, что он не будет использоваться. - Это:
- увеличит сложность всех ваших запросов.
- увеличивает объем пространства, используемого вашими таблицами.
- ухудшает общую производительность вашей базы данных.
Еще одна альтернатива - избегать преобразование в дату и выигрыш от того, что формат ISO можно сортировать с использованием сравнения ASCII. В вашем конкретном случае c вы могли бы сделать:
SELECT *
FROM TABLE
WHERE traceTime < '2020-02-21T08:40:07.749060'
Но все же было бы лучше, если бы traceTime имел тип DATETIME
, запрос был бы таким же.