开发者

select sql data order by date

开发者 https://www.devze.com 2023-02-17 19:18 出处:网络
I have a table with a column called date, as a varchar.The contents are specifically fo开发者_运维技巧rmatted like \'March 11, 2011\'.

I have a table with a column called date, as a varchar. The contents are specifically fo开发者_运维技巧rmatted like 'March 11, 2011'.

How can I select the results have them correctly ordered by date?


I'm blindly assuming MySQL here, because it makes sense in the context of this question. Nobody using another database engine would dare create this problem in the first place.

STR_TO_DATE to the rescue! Given the format "March 01, 2000", the following conversion should work.

SELECT STR_TO_DATE(column_name, '%M %d, %Y')
  FROM TableName
 WHERE ...
 ORDER BY STR_TO_DATE(column_name, '%M %d, %Y')

You may need to adjust the format string a bit.


Yes, you can use the DATE function along with CURDATE.

SELECT * FROM tbl WHERE DATE(your_date_column) = CURDATE()

This will select all rows where your_date_column is todays date.

If you want to select all rows where your_date_column is between two dates, you can simply use BETWEEN:

SELET * FROM tbl WHERE your_date_column BETWEEN '20111-03-20' AND '2011-03-30'


If your two dates are in variables such as $date_begin and $date_end, you could use an SQL query like the following one, to get data that's between those dates :

select *
from your_table
where date between '$date_begin' and '$date_end'


(Not sure I quite understand the question)
If you want to get the rows that correspond to the current date, you'll need to variables :

  • $current ; that would be like 2011-03-20 -- which means 2011-03-20 00:00:00
  • $next ; that would be like 2011-03-21 -- which means 2011-03-21 00:00:00

And you'll use a query like this one :

select *
from your_table
where date >= '$current' and date < '$next'

To select data that has its date which is greater or equal that today ; and that's before tomorrow.


In any case, try to not apply an SQL function on your date column ; don't do anything like this :

where some_function(date) >= ...

Doing this, your database engine would have to apply that function to all lines of your table, not using any index you might have on the date column -- and this will result in bad performances.

0

精彩评论

暂无评论...
验证码 换一张
取 消