Сохраненная функция MySQL: Работа с разделенной запятыми строкой в ​​MySQL - PullRequest
0 голосов
/ 11 июня 2018

Даты начала хранятся в строке через запятую в MySQL.Я хочу, чтобы сохраненная функция получала самую раннюю дату начала из строки CSV

EG:

Строка: 2018-04-16,2018-10-08,2018-11-15

Желаемый результат: 2018-04-16

Ответы [ 2 ]

0 голосов
/ 14 июня 2018

Это близко.- все еще некоторые синтаксические ошибки:

CREATE FUNCTION min_date_from_csv(str VARCHAR(255))
RETURNS VARCHAR(12)
BEGIN
DECLARE mindate VARCHAR(12);
DECLARE x VARCHAR(12);
SET mindate = 0;
SET x = 0;


IF LOCATE(',',str)>0 THEN
   mindate = SUBSTRING(str,0,(LOCATE(',',str)));
   str = SUBSTRING(str,(LOCATE(',',str)));
   TRIM(LEADING ',' FROM str);
ELSE
   mindate = str;
END IF; 


WHILE LOCATE(',',str)>0
   x = SUBSTRING(str,0,(LOCATE(',',str)));
   IF x <= mindate  THEN
      mindate = x;
   END IF;

   str = SUBSTRING(str,(LOCATE(',',str)));
   TRIM(LEADING ',' FROM str);
END WHILE;
RETURN mindate;
0 голосов
/ 11 июня 2018

Если в ваших строках даты всегда есть ровно три даты, то должно работать следующее:

SELECT
    LEAST(SUBSTRING_INDEX(dates, ',', 1),
          SUBSTRING_INDEX(SUBSTRING_INDEX(dates, ',', -2), ',', 1),
          SUBSTRING_INDEX(dates, ',', -1)) AS least_date
FROM yourTable;

2018-04-16

Демо

Однако , ваша текущая таблица имеет очень плохой дизайн, если вы храните даты в виде строк CSV.Вместо этого вы должны хранить каждую дату в отдельной записи.Затем вы можете легко использовать функцию MIN, возможно, с GROUP BY, чтобы получить нужный ответ.

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