【问题标题】:MYSQL Fetch Date and Time Stored as String and ORDER BYMYSQL 获取存储为字符串和 ORDER BY 的日期和时间
【发布时间】:2018-01-26 14:26:20
【问题描述】:

我有一个特定的原因将数据库表中的日期和时间存储为以下格式的字符串

DateFmt = "dd-MM-yyyy";
TimeFmt = "hh:mm a";

现在,在获取时,我想通过将字符串转换为日期和时间进行排序,然后排序以显示在 TableView 中,因此较新的行排在最前面。

如果我们存储为日期和时间,这将起作用,

ORDER BY `DATE` DESC, `TIME` DESC

我们如何从String转换并使用order by

【问题讨论】:

    标签: mysql sql sorting datetime sql-order-by


    【解决方案1】:

    使用str_to_date():

    order by str_to_date(date, '%d-%m-%Y')
    

    我应该补充一点:我想不出在数据库中以这种格式存储日期的充分理由。您应该使用内置的日期/时间类型。它们的存在是有原因的。

    如果您必须将日期存储为字符串(我偶尔会这样做),您应该使用 YYYY-MM-DD 格式。这是 ISO 标准,可以轻松转换为日期,并且可以正确排序。

    【讨论】:

    • 我使用的是印度格式 dd-MM-yyyy。所以我将它存储为字符串。
    • @SujayUN 。 . .您可以在输出 时将其转换为字符串,使用date_format()。没有理由将其存储为字符串。
    【解决方案2】:

    我提供了这样的解决方案:

    SQL:

    SELECT * FROM NamTbl
        ORDER BY STR_TO_DATE(CONCAT(DateCol,' ',TimeCol), '%d-%m-%Y %h:%i') DESC
    

    SQLite:

    "SELECT * FROM " + NamTblVar +
                 " ORDER BY STRFTIME('%d-%m-%Y %h:%i'," + DateKolVar + "|| ' ' ||" + TimeKolVar + ") DESC;";
    

    【讨论】:

    • 我应该感谢@Gordon Linoff 的提示并帮助获得此解决方案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 2012-07-16
    • 2013-08-20
    • 2018-02-19
    • 1970-01-01
    相关资源
    最近更新 更多