Splitting fields in sql query and sorting by them

感情迁移 提交于 2021-01-27 22:30:49

问题


I have a field containg a combined date, something line 2012-02-03 - 2012-02-05 where the first date is the "from" date, and second is the "to" date.

Is there a way that I can split these two dates and then order by the "from" date ?

I know the best thing would be to have two different fields for these two dates, but since I began doing it this way there is alot of recoding to seperate them.


回答1:


You can use SUBSTRING_INDEX for this.

Assuming your dates have ' - ' between them (i.e. space, hypen, space), you can do something like:

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

SUBSTRING_INDEX(string,delimiter,count) returns all of string up to (not including) the countth occurence of delimiter. If delimiter is negative it counts from the right and returns the substring from the end of the string instead.

I used DATE(fromDate) to convert fromDate from a string to a MySQL Date so it sorts in a date-like fashion.




回答2:


or, if your dates have exactly 10 characters lenght, you can use SUBSTRING as follows http://sqlfiddle.com/#!2/53006/4




回答3:


You can you left and right function to get the 10 digit from left in that column and 10 digit from right in column, using alias from_date and to_date then order by.

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;


来源:https://stackoverflow.com/questions/9529198/splitting-fields-in-sql-query-and-sorting-by-them

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!