Как сравнить дату, если один столбец имеет дату начала и окончания - PullRequest
0 голосов
/ 19 февраля 2020

Столбец имеет дату начала и окончания

month_name
23 March, 2018 - 23 April, 2018

23 марта 2018 года - start date, а 23 апреля 2018 года - end date

Как их использовать что касается даты начала и окончания запроса?

Ответы [ 3 ]

2 голосов
/ 19 февраля 2020

Вам нужно будет использовать SUBSTRING_INDEX , чтобы вернуть часть строки слева или справа от дефиса. Но это было бы ужасно с точки зрения производительности . Таким образом, вам нужно посмотреть на вашу структуру данных и изменить дизайн соответственно. Даты начала и окончания должны быть в разных столбцах с указателем INDEX и соответствующим набором DATATYPE ( DATETIME, TIMESTAMP, DATE ).

Я бы предложил обработать текст перед сохранением в базы данных, с помощью функции регулярного выражения или разделения / подстроки на языке клиента для правильного форматирования дат в формате MYSQL перед сохранением.

1 голос
/ 19 февраля 2020

Для каждого запроса, который должен использовать эти даты, вам нужно будет снять одну или обе эти даты, которые имеют отношение к запросу, с помощью такого типа текста и манипуляции с датами

SELECT .....
WHERE whatever_else
AND STR_TO_DATE(SUBSTRING_INDEX(monthname, ' -', 1 ), '%d %M,%Y') = '2018-03-23' 
AND STR_TO_DATE(SUBSTRING(monthname, INSTR(monthname, '- ') +2 ), '%d %M,%Y') = '2018-04-23'

Короче говоря, ваши запросы станут полным кошмаром для написания и поддержки, и любые преимущества в области индексирования, которые вы могли бы использовать, если бы эти 2 даты были сохранены в 2 отдельных столбцах, были полностью потеряны.

SUBSTRING_INDEX ()

SUBSTRING ()

INSTR ()

STR_TO_DATE ()

1 голос
/ 19 февраля 2020
set @fromto='23 March, 2018 - 23 April, 2018'; 
select 
  str_to_date(left(@fromto,locate('-',@fromto)-1),'%d %M,%Y') datefrom,
  str_to_date(right(@fromto,length(@fromto)-locate('-',@fromto)),'%d %M,%Y') dateto;

output:

+------------+------------+
| datefrom   | dateto     |
+------------+------------+
| 2018-03-23 | 2018-04-23 |
+------------+------------+

краткое объяснение:

  1. set @fromto - определяет переменную, которая используется в качестве ввода для этого примера

  2. locate ('-' ,@fromto) - здесь будет найдена длина детали в @fromto до '-', необходимо -1, потому что там, где требуется только деталь перед '-'

  3. length (@fromto) -locate ('-' ,@fromto) - здесь будет найдена длина детали в @fromto после '-'

  4. str_to_date (...) - см. STR_TO_DATE

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