我想要給SELECT定日期之后的所有資料。這看起來簡單而基本,所以我只是這樣做:
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(),
這是結果:

uj5u.com熱心網友回復:
這很奇怪,但您可以使用以下查詢作為出路。
select * from contents where "createdAt" >= '2021-10-18 13:27:01' INTERVAL '1 ms';
這將省略提到的日期,即“2021-10-18 13:27:01”,并獲得下一個可用日期,即必須比提到的日期大 1 毫秒。
uj5u.com熱心網友回復:
根據討論,我遇到的問題是由Postgres 時間戳fractions of a second中的 或 微秒精度引起的。
我的查詢相當于where "createdAt" > '2021-10-18 13:27:01.000'. 如果我有資料createdAt值'2021-10-18 13:27:01.230'那么它當然會被包含在查詢結果。
解決方案:
- 使用
date_trunc( more )忽略微秒:
select * from contents where date_trunc('second', "createdAt") > '2021-10-18 13:27:01'
- 添加 1 秒。
如果您想在之后選擇所有資料,2021-10-18 13:27:01只需向其添加 1 秒:
select * from contents where "createdAt" => '2021-10-18 13:27:02';
它會比較“createdAt”值=> '2021-10-18 13:27:02.000'是> '2021-10-18 13:27:01'
我推薦第一種解決方案。在我看來,第二種解決方案容易與條目不匹配。因為我們需要在實際執行之前處理時間戳。但它仍然有效。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/344878.html
標籤:sql PostgreSQL 约会时间
上一篇:我如何擺脫年、月和日?[復制]
