当前位置: 首页 > 知识库问答 >
问题:

为什么选择大于某个日期的值也会返回匹配的日期?

张财
2023-03-14

我想选择给定日期后的所有数据。这看起来很简单,很基本,所以我就这样做:

select * from contents where "createdAt" > '2021-10-18 13:27:01';

但不知何故,createdAt===“2021-10-18 13:27:01”的数据也被选中。我不想那样。我该怎么修?

更新:

这是createdAt

"createdAt" timestamptz NOT NULL DEFAULT now(),


共有2个答案

宗苗宣
2023-03-14

基于讨论,我遇到的问题是由Postgres时间戳中的分数或微秒精度引起的。

我的查询相当于where“createdAt”

解决方案:

  1. 使用date\u trunc(更多信息)忽略微秒:
select * from contents where date_trunc('second', "createdAt") > '2021-10-18 13:27:01'

如果你想选择2021-10-18 13:27:01之后的所有数据,那么只需添加1秒即可:

select * from contents where "createdAt" => '2021-10-18 13:27:02';

它会将“createdAt”值与=

我推荐第一种解决方案。在我看来,第二种解决方案很容易与条目不匹配。因为我们需要在实际执行之前处理时间戳。但它仍然奏效。

朱祺
2023-03-14

这很奇怪,但是你可以使用下面的查询作为出路。

select * from contents where "createdAt" >= '2021-10-18 13:27:01'+ INTERVAL '1 ms';

这将省略提及的日期,即“2021-10-18 13:27:01”,并获得下一个可用日期,即必须比提及的日期大1毫秒。

 类似资料:
  • 问题内容: 这是我的SQL Server表 这似乎很容易做到,但我不知道为什么会被卡住。我只想为每个id选择max(date)和该max(date)处的值。我想忽略相对于每个ID而言不是max(date)的所有其他日期。 这是我希望表格看起来像的样子: 我尝试通过使用max(date)进行分组,但没有进行任何分组。我不确定自己在做什么错。在此先感谢您的帮助! 问题答案: 您可以使用以下内容: 观看

  • 问题内容: 表格示例: 所需的输出(不是确切的格式或上市顺序),每台计算机上每个应用程序的最新安装: 我的SQL语句: 这给了我: 并不是 如我所料。 如果我 仅 选择MAX(date),而没有其他选择,则MAX(date)有效。但是,那时我没有任何数据可以使用(仅是最新日期)。 我不是SQL忍者,所以我很快就会因此而挠头。 问题答案: 尝试这样: 内部查询是为您获取每对计算机和应用程序的max(

  • 我试图从一个配置单元表中选择*,其中名为TRANS_DATE的日期列say在最大TRANS_DATE的365天之前>=。

  • 我想在日期时间选择器中选择大于开始日期的结束日期时间。 当前,我正在开始日期时间和结束日期时间。 假设,我选择了时间为12:00 pm的当前日期,现在end date应该是时间为1:00 pm的当前日期。 我想要下面这样的东西 示例 开始日期和时间:---2019-11-06 12:00结束日期和时间:---2019-11-06 1:00 这是我的代码 null null

  • 问题内容: 哪里是。 当我执行以上操作时,时间变成 我在做错什么?这是一个错误吗?我希望它是2013年的第一周,而不是最后一周。 问题答案: 看这里。 该weekyear,模式字母的,周是为了与使用,weekyear。从javadoc的 将模式更改为 然后您将解析为 根据您的情况,2013年的第一周始于2012年。

  • 如何向MaterialDatePicker添加约束以强制用户选择仅介于两个日期之间的日期?