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



我有一个Exams表,其中有一个日期列,格式如下:'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":/

谢谢你的帮助。

您没有使用sql server。看起来您正在使用Oracle。如果您使用的是SqlServer,您可以直接转换到日期时间,如下所示:

ORDER BY cast(Exam_date as DATETIME)

我已经很久没有使用Oracle了。。。尝试使用以下内容:

ORDER BY TO_DATE(Exam_Date)

我假设Exams表中Exam_date的基础字段是日期或日期时间类型。如果是这样的话,您需要理解,当您对字段执行操作,然后调用与基础字段名称相同的表达式时,当您尝试执行ORDERBY.时,您将失去对基本字段的访问权限

更好的方法是将表达式公开为不同的字段名。如果你不能做到这一点,你会想把你的基本字段暴露为一个别名字段,这样你就可以按它排序

我正在做的第二个假设是,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
select to_char(Exam_Date,'MONTH/DD/YYYY') Exam_date2
from Exams 
order by Exam_Date;

您的代码失败了,因为您使用了相同的列名别名,所以它按Exam_date作为字符串排序。

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

ORDER BY Exams.Exam_date ASC

最新更新