【问题标题】:order by datetime with type varchar按日期时间排序,类型为 varchar
【发布时间】:2016-12-09 12:58:23
【问题描述】:

我有一个问题,但在 stackoverflow 上没有找到解决方案。所以这是我的问题:

如何在我的 PHP 文件中按日期时间 (dd/mm/yy hh:mm:ss) 优先级订购 Varchar? 我有一个带有“registerdate”列的 SQL 表。它的类型是 Varchar (由于其他表问题,无法使用日期时间)。我的 SQL ORDER BY 查询是:

SELECT * FROM users ORDER BY registerdate DESC LIMIT 3

这会导致:

12-11-16 11:03:54 
06-12-16 19:05:22 
06-12-16 15:03:30

我想要它:

06-12-16 19:05:22
06-12-16 15:03:30
12-11-16 11:03:54

在我的 php 文件中,我使用 $datetime=date("d/m/y H:i:s"); 注册时间在我的桌子上是一个 Varchar,看起来像 03/12/16 12:19:33

我想我必须在我的 SQL 查询中转换它,但我不知道如何。谁能帮我?非常感谢!

-----服务器/SQL 信息-----

Server: Localhost via UNIX socket
Servertype: MariaDB
Serverversie: 10.0.27-MariaDB-cll-lve - MariaDB Server
Protocolversie: 10

【问题讨论】:

  • ORDER BY STR_TO_DATE(registerdate , '%d/%m/%Y %h:%i:%s')
  • 谢谢卡马尔。解决方案: ORDER BY STR_TO_DATE(registerdate , '%d/%m/%y %H:%i:%s') 所以大写的 H 代替了小写的 h 和小写的 y 代替了大写的 Y。
  • 请记住,性能不会很好。您确实应该将日期时间值存储在 DATETIME(或 TIMESTAMP)数据类型中。此评论适用于迄今为止所有建议的解决方案。

标签: sql datetime sql-order-by mariadb varchar


【解决方案1】:
SELECT * FROM users u ORDER BY STR_TO_DATE(u.registerdate, '%d/%m/%Y %H:%i:%s') DESC LIMIT 3

SELECT *, STR_TO_DATE(u.registerdate, '%d/%m/%Y %H:%i:%s') as newdate FROM users u ORDER BY newdate DESC LIMIT 3 

【讨论】:

  • 感谢您的帮助,但两者都不起作用。我忘了说,在我的 php 文件中,我用$datetime=date("d/m/y H:i:s"); 注册了时间,在我的表中它是一个看起来像03/12/16 12:19:33 的 Varchar。
  • 抱歉,太早了。它不起作用。日期安排得很好,但时间不准。
  • 您遇到了什么错误?或者它有效,但结果的顺序不正确?
  • 试试 ORDER BY UNIX_TIMESTAMP(STR_TO_DATE(u.registerdate, '%d/%m/%Y %h:%i:%s'))
  • 我没有收到任何错误,但它没有订购。它命令错误(我没有看到任何逻辑)或者当我改变一些小东西时它根本没有命令。
【解决方案2】:

如果您使用的是 sql server,我认为这也适用于您。

SELECT * FROM users ORDER BY Cast(registerdate AS datetime) DESC

【讨论】:

  • 谢谢,但它不起作用..我忘了说在我的 php 文件中我用$datetime=date("d/m/y H:i:s"); 注册了时间,在我的表中它是一个看起来像03/12/16 12:19:33 的 Varchar /跨度>
【解决方案3】:

对于 Oracle 数据库,语法为:

SELECT * FROM users ORDER BY TO_DATE(registerdate, 'DD/MM/YY HH24:MI:SS') DESC

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-11
    • 1970-01-01
    • 1970-01-01
    • 2013-03-30
    • 2012-12-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多