【发布时间】:2020-05-17 16:41:21
【问题描述】:
我有一个数据库,其中包含一个使用文本的日期/时间字段。它的类型为DATE/TIME。在 DB 浏览器中查看时,它看起来像“2020-01-21 19-33-22Z”。我想按DESC 日期/时间顺序订购表格。使用 DB Browser,我可以执行如下所示的 SQL 语句:
SELECT * FROM LOG ORDER BY QSODATE DECS
该语句在 DB Browser 中有效,但在我的 PHP 7.3.6 环境中无效。当我运行 PHP 程序时,我没有收到任何错误,我确实获得了与表的连接,并且可以从表中提取数据,但顺序不正确。订单看起来像没有调用订单的原始表。
编辑 2020 年 1 月 2 日 从数据库浏览器: 结果:7251 行在 2480 毫秒内返回 在第 1 行: SELECT * FROM LOG ORDER by qsodate DESC
这会导致不正确的部分顶行: 20200122192000960 xx3xxx 40m FT8 2020-01-21 22:35:00Z
整个记录将毫无意义,但这个 sn-p 包含我试图设置订单的日期和时间。现在我看到当我输入第一个示例时,我在“DESC”中交换了两个字母。对不起。
但是应该在顶部的日期/时间是:2020-01-31 18:26:00Z
示例中的日期/时间是未排序的日期/时间。
PHP 代码行是:
$result = $connection->query("SELECT * FROM LOG ORDER by qsodate DESC");
【问题讨论】:
-
问题中的 sqlite sn-p 给出了语法错误,并且不会在 DB Browser 或 php 中运行。重要的是要查看 1) 在 php 中实际执行的查询和 2) 返回的一些显示错误顺序示例的数据。您可以编辑此问题以提供更多信息。
-
你是对的。这是来自 DB Browser 的剪切和粘贴:
-
sqlite does not have a date/time datatype。这种
2020-01-21 22:35:00Z格式的数据将作为字符串排序。我理解正确吗:DB Browser 返回的第一行在 qsodate 中有2020-01-21 22:35:00Z。但是您希望它返回以 qsodate =2020-01-31 18:26:00Z作为第一行的行吗?我最初以为您是说 DB Browser 和 php 现在以不同的顺序返回行我认为您的意思是两者都以“错误”的顺序返回行?你能澄清一下吗?您确定qsodate是正确的列吗? -
是的 'qsodate' 是正确的列。我是一名业余无线电操作员,这些数据包含在我用来跟踪联系人的应用程序中。 sqlite 数据文件是数据文件的直接无转换副本。 DB Browser 告诉我列是 DATETIME 并且表中有两种数据类型。此外,数据库中嵌入的索引之一包括“qsodate”。是的 - 在 DB Browser 和我的 PHP 应用程序中,顺序是相同的。在管理数据库的应用程序 (Log4OM) 中,序列从 2020-01-31 日期开始。
-
如果列以空白开头,则 2020-01-31 日期不会排在最前面。肉眼可能很难检测到,但计算机却检测不到。期望所有行的 qsodate 长度为 20。像
select length(qsodate), count(*) from log GROUP BY length(qsodate)这样的 sql 确认了吗?