Разделение полей в SQL-запросе и сортировка по ним - PullRequest
2 голосов
/ 02 марта 2012

У меня есть поле, связанное с комбинированной датой, строка чего-то 2012-02-03 - 2012-02-05, где первая дата - это дата «с», а вторая - «до».

Есть ли способ, которым я могу разделить эти две даты, а затем упорядочить по дате "от"?

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

Ответы [ 3 ]

3 голосов
/ 02 марта 2012

Для этого вы можете использовать SUBSTRING_INDEX.

Предполагая, что между вашими датами есть '-' (то есть пробел, знак, пробел), вы можете сделать что-то вроде:

SELECT SUBSTRING_INDEX(datefield,' - ',1) as fromDate,
       SUBSTRING_INDEX(datefield,' - ',-1) as toDate,
FROM ..
ORDER BY DATE(fromDate)

SUBSTRING_INDEX(string,delimiter,count) возвращает все string вплоть до (не включая) count-го вхождения delimiter. Если delimiter отрицательно, он считается справа и возвращает подстроку с конца строки.

Я использовал DATE(fromDate) для преобразования fromDate из строки в MySQL Date, чтобы она сортировалась по типу даты.

1 голос
/ 02 марта 2012

Вы можете влево и вправо , чтобы получить 10 цифр слева в этом столбце и 10 цифр справа в столбце, используя псевдонимы from_date и to_date, затем упорядочить по.

2012-02-03 - 2012-02-05
__________   __________
 Left 10      Right 10 
 Digits       Digits


SELECT LEFT(mydate,10) AS from_date,
       RIGHT(mydate,10) AS to_date
       FROM mytable
       ORDER BY from_date,to_date;
1 голос
/ 02 марта 2012

или, если ваши даты имеют длину ровно 10 символов, вы можете использовать SUBSTRING следующим образом http://sqlfiddle.com/#!2/53006/4

...