Сравнение двух строк даты и времени ISO в MySQL - PullRequest
1 голос
/ 26 февраля 2020

У меня есть таблица, в которой только DateTime хранится в формате varchar в формате ISO. Я хотел знать, что будет запрос MySQL для сравнения заданного произвольного DateTime в формате iso с DateTime (в varchar), хранящимся в таблице.

Ответы [ 2 ]

2 голосов
/ 26 февраля 2020
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, запрос был бы таким же.

0 голосов
/ 26 февраля 2020

В mysql Вы можете легко преобразовать строку в дату и время, используя

 str_to_date(your_string, your_format)

 str_to_date('31-12-2019', '%d-%m-%Y')

https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_str к дате

https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_date -format

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...