【问题标题】:SQL: How can I sort strings in Date format(MONTH/DD/YY)?SQL:如何以日期格式(MONTH/DD/YY)对字符串进行排序?
【发布时间】:2015-11-02 20:20:05
【问题描述】:

我有一个考试表,其中有一个日期列,格式如下:'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 吗? TO_CHAR 在我听说过的任何版本中都不是有效的语法。

标签: sql string oracle sorting date


【解决方案1】:

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

ORDER BY cast(Exam_date as DATETIME)

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

ORDER BY TO_DATE(Exam_Date)

【讨论】:

  • 哦,谢谢,如果我输入 ORDER BY cast(Exam_date 作为日期)就可以了
  • 是的,你是对的,我正在使用oracle,抱歉信息不正确,再次感谢您的帮助
【解决方案2】:

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

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

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

方法一:

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

方法二:

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

【讨论】:

  • 非常感谢。我想我明白这是如何工作的
【解决方案3】:
select to_char(Exam_Date,'MONTH/DD/YYYY') Exam_date2
from Exams 
order by Exam_Date;

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

【讨论】:

    【解决方案4】:

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

    ORDER BY Exams.Exam_date ASC
    

    【讨论】:

    • 很好奇这会被否决,因为它似乎是这个问题的最佳答案。
    猜你喜欢
    • 1970-01-01
    • 2019-07-06
    • 1970-01-01
    • 2011-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-11
    相关资源
    最近更新 更多