SQL ORDER BY日期问题

时间:2009-10-09 20:27:07

标签: sql date sql-order-by

你能帮我解决这个问题吗?我试图按日期排序SQL查询的结果,但我没有得到我需要的结果。

我正在使用的查询是:

SELECT date FROM tbemp ORDER BY date ASC

结果是:

01/02/2009
03/01/2009
04/06/2009
05/03/2009
06/12/2008
07/02/2009

结果应该是:

06/12/2008
03/01/2009
01/02/2009
07/02/2009

我需要以上面的格式选择日期。

非常感谢您的帮助。

11 个答案:

答案 0 :(得分:39)

您的日期列似乎不是datetime类型,而是varchar。您必须在排序时将其转换为日期时间:

select date
from tbemp
order by convert(datetime, date, 103) ASC

style 103 = dd/MM/yyyy ( msdn )

答案 1 :(得分:15)

听起来我的列不是日期列,而是文本列(varchar / nvarchar等)。您应该将其作为日期存储在数据库中,而不是字符串。

如果 因某种原因将存储为字符串,请将其存储为可排序的格式,例如YYYY / MM / DD。

正如najmeddine所示,你可以在每次访问时转换列,但我会非常努力不这样做。它将使数据库执行 lot 更多工作 - 它将无法保留适当的索引等。尽可能将数据存储在适合数据本身的类型中。

答案 2 :(得分:11)

不确定你正在使用什么dbms但是我在Microsoft SQL中这样做:

select      [date]
from        tbemp 
order by    cast([date] as datetime) asc

答案 3 :(得分:6)

这对我有用:

SELECT datefield FROM myTable ORDER BY CONVERT(DATE, datefield) ASC

答案 4 :(得分:3)

以下答案可能会对您有所帮助

按日期标识符执行日期排序,但在select子句中使用to_char()函数,并在select子句中使用其他标识符作为日期

e.g。

SELECT TO_CHAR(DISPDATE1,'DD/MM/YYYY') AS DISPDATE,
SUM(APPLCOUNT) AS APPLIED,
SUM(CONFCOUNT) AS CONFIRMED
FROM
    (
        SELECT COUNT(ID) AS APPLCOUNT,
                   0 AS CONFCOUNT,
                   STUDENT.APPLIED_ON AS DISPDATE1
            FROM STUDENT
            WHERE STUDENT.ID = P_ID
            GROUP BY STUDENT.APPLIED_ON
        UNION
            SELECT 0 AS APPLCOUNT,
                   COUNT(ID) AS CONFCOUNT,
                   STUDENT.CONFIRMED_ON AS DISPDATE1
            FROM STUDENT
            WHERE STUDENT.ID = P_ID
            GROUP BY STUDENT.CONFIRMED_ON
    )
GROUP BY DISPDATE1
ORDER BY DISPDATE1;

答案 5 :(得分:3)

SELECT CONVERT(char(19),CAST(date AS datetime),101)as [date]
来自tbemp ORDER BY转换(datetime,date,101)ASC

答案 6 :(得分:2)

尝试将此作品用于我

select *  from `table_name` ORDER BY STR_TO_DATE(start_date,"%d-%m-%Y") ASC

其中 start_date 是字段名称

答案 7 :(得分:1)

这可以帮助你在mysql,php。

//your date in any format
$date = $this->input->post('txtCouponExpiry');

$day = (int)substr($date, 3, 2);
$month = (int)substr($date, 0, 2);
$year = (int)substr($date, 7, 4);

$unixTimestamp = mktime(0, 0, 0, $year, $day, $month);

// insert it into database
'date'->$unixTimestamp;

//query for selecting  order by date ASC or DESC
select * from table order_by date asc;

答案 8 :(得分:1)

试试这个

Order by Convert(datetime,@date) desc

答案 9 :(得分:1)

我想用后代的chonologic顺序编辑几个事件,我刚做了一个:

select 
TO_CHAR(startdate,'YYYYMMDD') dateorder,
TO_CHAR(startdate,'DD/MM/YYYY') startdate,
...
from ...
...
order by dateorder desc

它对我有用。 但肯定不适合每个案例...... 希望它能帮助别人!

答案 10 :(得分:1)

这应该适用于您的日期格式

order by convert(date, your_column, 104) desc