我有一个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