[英]Time/datetime Comparison in PostgreSQL (Heroku)
我正在為 Heroku (Postgres) 構建一個應用程序,但出於各種原因,使用 MySQL 在本地開發它。 我遇到了一個障礙,因為我的 MySQL 開發環境沒有任何問題,但 heroku Postgres 環境掛斷了。 這是來自 Heroku 的日志流:
2012-02-07T10:00:00+00:00 app[web.1]: Report Load (2.5ms) SELECT id, datetime_utc FROM "reports" WHERE (datetime_utc = '2012-02-07 10:00:00.000000') AND (datetime_utc > spot_sunrise_utc AND datetime_utc > spot_sunset_utc) ORDER BY datetime_utc ASC LIMIT 500
2012-02-07T10:00:00+00:00 app[web.1]: PGError: ERROR: operator does not exist: timestamp without time zone > time without time zone
2012-02-07T10:00:00+00:00 app[web.1]: LINE 1: ...EEN 0.4573170731707317 and 200) AND (datetime_utc > spot_sun...
2012-02-07T10:00:00+00:00 app[web.1]: ^
2012-02-07T10:00:00+00:00 app[web.1]: HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.
datetime_utc
字段是一個真實的datetime
而spot_sunrise
/ sunset_utc
字段只是時間值。
這是什么原因造成的,我該如何解決?
為了緩解類型不兼容,將timestamp
值datetime_utc
為time
:
SELECT id, datetime_utc
FROM reports
WHERE datetime_utc = '2012-02-07 10:00'
AND datetime_utc::time > spot_sunrise_utc
AND datetime_utc::time < spot_sunset_utc -- you mean <, right?
ORDER BY datetime_utc -- noise
LIMIT 500;
看:
添加的ORDER BY datetime_utc
只是使用WHERE datetime_utc = '2012-02-07 10:00'
過濾后的噪音。
旁白 1:在本地使用與部署相同的數據庫進行開發通常是個好主意。 所以在本地使用 MySQL 是一個壞主意。
旁白2:數據庫名稱為PostgreSQL或Postgres。 沒有“postgre”這樣的東西。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.