当前位置: 首页 > 面试题库 >

来自带有BETWEEN时间戳记的SQL查询的意外结果

司空福
2023-03-14
问题内容

我创建了一个小测试应用程序来跟踪我在Heroku上使用Postgres遇到的问题:http :
//snippi.com/s/xd511rf

正如您在第 49 行中看到的那样,我想检索 今天 创建的所有条目。这将是我使用Ruby Gem DataMapper进行的
测试数据的前两项。

当我在笔记本电脑(Ubuntu 12.10,HP,Ruby 1.9.3)上运行此应用程序时,一切都会得到以下结果,这是正确的:

[
{
    "id": 1,
    "text": "Working on some awsomenewss",
    "category": 0,
    "starttime": "2013-03-21T15:56:00+01:00",
    "endtime": "2013-03-21T18:26:00+01:00",
    "creation": "2013-03-21T16:15:21+01:00"
},
{
    "id": 2,
    "text": "facebooking",
    "category": 0,
    "starttime": "2013-03-21T20:48:00+01:00",
    "endtime": "2013-03-21T22:26:00+01:00",
    "creation": "2013-03-21T16:15:21+01:00"
}
]

在我的调试控制台中,记录此SQL查询:

SELECT "id", "text", "category", "starttime", "endtime", "creation" 
  FROM "entries" 
  WHERE "starttime" 
    BETWEEN '2013-03-21T00:00:00+00:00' 
      AND '2013-03-21T23:59:59+00:00' 
  ORDER BY "id"

但是在将应用程序推送到Heroku之后,发生了非常奇怪的错误。当我现在运行它时(http://afternoon-
everglades-4239.herokuapp.com/),这是响应:

[]

为什么它是空的?

数据肯定在数据库中,这由Heroku的Dataclip证明:https://dataclips.heroku.com/hygziosyxwperyctwfbhjzgbzhbj

另外,当我通过herheroku pg:psql麓手动运行SQL命令时,它实际上可以与以下输出一起使用:

id | 文字| 类别| 开始时间 结束时间| 创建       
---- + --------------------------------------------- + ---------- + ---- ----------------- + --------------------- + ---------- -----------
  1 | 正在处理一些awsomenews | 0 | 2013-03-21 15:56:00 | 2013-03-21 18:26:00 | 2013-03-21 16:15:21
  2 | 脸书| 0 | 2013-03-21 20:48:00 | 2013-03-21 22:26:00 | 2013-03-21 16:15:21
(2列)

日志不包含任何错误或更多信息。在这两种情况下(生产环境和本地环境),我都使用了 远程Heroku PostgreSQL数据库

那么为什么这行不通呢?


问题答案:

检查列的 数据类型 和您的 时区 。您可能会感到困惑 timestamp with time zone
timestamp

看起来像您timestamp的表中一样,但是使用进行查询timestamptz。这样,这完全取决于会话的本地时区(如果未另行指定,则默认为服务器的时区)。

将两者都切换为timestamptz,或者timestamp如果时区与您完全无关。(如有疑问,请使用timestamptz。)

不是您的问题的原因,但您的查询可能应该是:

SELECT id, text, category, starttime, endtime, creation 
FROM   entries 
WHERE  starttime >= timestamp '2013-03-21' -- defaults to 00:00 time
AND    starttime <  timestamp '2013-03-22'
ORDER  BY id

a BETWEEN x AND y几乎总是错timestamp,由于小数的类型!您的查询将做starttime = '2013-03-21T23:59:59.123+00'什么?



 类似资料:
  • 我做了一个练习,将某些数字提升到给定的幂。正是我遇到的问题: 我们使用整数a、b和n来创建以下序列: 将以a、b和n的形式为您提供q查询。对于每个查询,将与给定a、b和n值对应的序列打印为一行由n个空格分隔的整数。 输入格式 第一行包含一个整数q,表示查询的数量。q后续行的每一行i都包含三个空格分隔的整数,描述该查询的相应ai、bi和ni值。 输出格式 对于每个查询,在新行上打印相应的序列。每个系

  • 问题内容: 我正在尝试从C#查询SQL Server数据库 我有课 我的查询中有问题。 当我给普通查询“从表中选择*”时,这给了我完美的结果。 但是当我尝试给出条件时,它给了我错误。有什么建议可以解决吗?谢谢。 问题答案: 钿狅笍 警告 此答案包含一个SQL注入安全漏洞。不要使用它。如该问题的其他一些答案所述(例如,Tony Hopkinson的答案),请考虑使用参数化查询。 尝试在where子句

  • 我们正在使用Apache Phoenix访问HBase数据存储。作为某些需求的一部分,我们需要记录从任何Phoenix客户端发出的每个更新操作,例如写和删除表命令。Phoenix的日志记录是否已经以可解析的格式捕获了这些命令?如果没有,我如何捕捉这些信息?

  • 问题内容: 其实我的主机上有一个php网站。现在,我将个性化一个Wordpress主题以替换它。暂时还可以,但是旧网站具有内置功能,可以使用令牌连接到另一个数据库。此连接仅用于获取一些数据。 您能告诉我如何在新的wordpress主题中实现此功能吗? 是否存在一个wordpress插件? 谢谢 问题答案: 将wordpress连接到第二个数据库 (没有令牌) 的最简单方法是添加以下代码(用连接数据

  • 问题内容: 我正在尝试使用JPA查询来获取记录,该查询在WHERE子句中具有DATE和TIMESTAMP列。但是日期和时间戳列无法以某种方式从数据库中检索任何内容。 代码段: Oracle中的数据是: 我最初尝试使用EntityManager.find(Class,Object)检索结果,但是也失败了,所以我尝试使用createNativeQuery(),但也未能成功。我的FinTable实体具有

  • 我有这样的桌子 数据如下所示,开始时间和结束时间是连续的时间跨度: 因此,如果用户传递两个参数,则可以在任意时间段内选择* 它应该以如下方式返回表: 你看,棘手的部分是将原始的时间跨度削减到用户定义的时间跨度(@from-@To),我已经为此奋斗了一整天。请指教。 提前非常感谢你!!!