SQL:如何以日期格式(MONTH / DD / YY)对字符串进行排序?

时间:2015-11-02 20:20:06

标签: sql string oracle sorting date

我有一个表格考试,我有一个日期列,格式如下:'MM / DD / YYYY'。

我必须对此列进行排序并将格式更改为“MONTH / DD / YYYY”

我的代码如下:

SELECT 
    TO_CHAR(Exam_Date, 'MONTH/DD/YY') AS Exam_date
FROM 
    Exams
WHERE 
    Student_id = '0000049'
ORDER BY 
    Exam_date ASC

不幸的是,这会像字符串一样对我的列进行排序:(

我也试过这个:

SELECT 
    TO_DATE(TO_CHAR(Exam_date, 'MONTH/DD/YYYY'), 'MONTH/DD/YYYY') AS Exam_date
FROM Exams
WHERE Student_id = '0000049'
ORDER BY Exam_date

在这里,我按照'MM / DD / YYYY'格式对它们进行了排序:/

感谢您的帮助。

4 个答案:

答案 0 :(得分:1)

您没有使用sql server。看来你正在使用Oracle。如果您使用的是Sql Server,则可以转换为datetime,如下所示:

ORDER BY cast(Exam_date as DATETIME)

我很长时间没有使用过Oracle ...尝试使用以下内容:

ORDER BY TO_DATE(Exam_Date)

答案 1 :(得分:1)

我假设Exam_date的Exams表中的基础字段是日期或日期时间类型。如果是这样,您需要了解当您对字段执行操作然后调用该表达式与基础字段名称相同时,您在尝试执行ORDER BY时将无法访问基本字段。

更好的方法是将表达式公开为不同的字段名称。如果你不能这样做,你会希望将你的基本字段暴露为别名,以便你可以按它排序。

我正在做的第二个假设是TO_CHAR是你实现的自定义函数,用于将日期显示为文本。

方法1:

SELECT TO_CHAR(Exam_Date, 'MONTH/DD/YY') AS Exam_date_Text
FROM Exams
WHERE Student_id='0000049'
ORDER BY Exam_date ASC

方法2:

SELECT TO_CHAR(Exam_Date, 'MONTH/DD/YY') AS Exam_date, Exam_date AS ORIG_Exam_date
FROM Exams
WHERE Student_id='0000049'
ORDER BY ORIG_Exam_date ASC

答案 2 :(得分:0)

select to_char(Exam_Date,'MONTH/DD/YYYY') Exam_date2
from Exams 
order by Exam_Date;

您的代码失败,因为您将别名作为相同的列名称,因此它按Exam_date排序为字符串。

答案 3 :(得分:-1)

最简单的方法是使用表别名来标识引用是否为列。唯一的变化是ORDER BY子句:

ORDER BY Exams.Exam_date ASC