我試圖只有SELECT
行(其中expiry_date(類型時間戳帶時區)不超過30天小於current_date(即失效日期爲30天)。WHERE expiry_date>(current_date - 30 * interval'1 day')
我以爲這是工作(注:寫一個更好的測試用例!),但顯然不是。 CLI中的一些測試未返回預期結果。
第一個查詢抓取單個行(詳細信息頁面),第二個抓取多個行(分頁視圖)。
SELECT *
FROM listings
WHERE id = $1 AND expiry_date > (current_date - $2 * interval '1 day')
(給出一個ID($ 1),返回該行,如果到期日不大於30($ 2)天)。
SELECT *
FROM listings
WHERE expiry_date > (current_date - $1 * interval '1 day')
ORDER BY expiry_date DESC OFFSET $2 LIMIT $3
(給定的偏移量($ 2),返回未過期的行中,以限制($ 3)。在默認的情況下,這些分別爲0和15日)。
當運行一個具有EXPIRY_DATE在過去連續第一個查詢(即2014年3月8日05:15:44.236747 + 00),它仍然返回該行
SELECT id, expiry_date FROM listings where id = '96144752ad41b6bf' AND expiry_date > (current_date - 30 * interval '1 day'); ____________________________________________________ _ id _ expiry_date _ ____________________________________________________ _ 96144752ad41b6bf _ 2014-03-09 02:33:25.855162+00 _ ____________________________________________________ (1 row)
當運行第二個查詢時,我得到了兩個過期的行和未過期的行的混合。
SELECT id, expiry_date FROM listings WHERE expiry_date > (current_date - 30 * interval '1 day') ORDER BY expiry_date DESC OFFSET 0 LIMIT 15; ____________________________________________________ _ id _ expiry_date _ ____________________________________________________ _ 333b0291f8e357b9 _ 2014-04-04 21:40:14.744937+00 _ _ 975d2a671ab577dd _ 2014-03-26 03:47:21.872271+00 _ _ af35cbc3b2f6189b _ 2014-03-25 04:43:23.78521+00 _ _ 3c3658ecceafde4b _ 2014-03-23 14:24:08.023696+00 _ _ 931c2d5795705b5b _ 2014-03-10 15:43:52.05335+00 _ _ eddb3711f02a0ad0 _ 2014-03-10 02:38:53.754079+00 _ _ e2814251618590db _ 2014-03-09 14:06:07.829742+00 _ _ 96144752ad41b6bf _ 2014-03-09 02:33:25.855162+00 _ _ 1dbdcd6cb2cc6e7f _ 2014-03-08 05:58:52.121108+00 _ _ d25d1b06b9e69f3e _ 2014-03-08 05:52:37.887371+00 _ _ c52aa23d79583033 _ 2014-03-08 05:17:09.683484+00 _ _ 56e9f4cdca899a40 _ 2014-03-08 05:15:44.236747+00 _ _ 302f0226b7b33f05 _ 2014-03-08 05:09:43.909115+00 _ _ edc45b7ca32f69f5 _ 2014-03-07 14:13:51.366852+00 _ _ 90c1ef396073ff28 _ 2014-03-07 13:04:12.250061+00 _ ____________________________________________________ (15 rows)
爲背景,在我的web應用程序UTC時間戳產生的日期;通過向created_date時間戳添加X天(通常30)插入之前設置expiry_date。
我在這裏錯過了什麼?
什麼是第一個查詢中的「$ 2」和第二個中的「$ 1」? –
當您詢問意外結果時,您需要顯示與查詢相對應的數據。也許http://sqlfiddle.com/在這裏很有用。 –
也許你的expiry_date列有一個設置爲意外事件的時區。另外,直接使用參數* as *日數量:'expiry_date>(current_date - interval'$ 2 day')' – Bohemian