有沒有辦法告訴PostgreSQL輸出包含結束日期的日期範圍?PostgreSQL:如何獲得包含結束日期的日期範圍?
例如,如果我運行此:
SELECT '[2016-09-01,2016-09-10]'::daterange
輸出是:
[2016-09-01,2016-09-11)
這實在是煩人的,因爲我得到什麼從數據庫返回的不匹配我投入的東西。
有沒有辦法告訴PostgreSQL輸出包含結束日期的日期範圍?PostgreSQL:如何獲得包含結束日期的日期範圍?
例如,如果我運行此:
SELECT '[2016-09-01,2016-09-10]'::daterange
輸出是:
[2016-09-01,2016-09-11)
這實在是煩人的,因爲我得到什麼從數據庫返回的不匹配我投入的東西。
這真的是安oying,因爲我所得到的從數據庫返回的不匹配是我的配製。
輸出[2016-09-01,2016-09-11)
爲包容日期2016-09-10
的。
的)
終了的上限的範圍內的裝置,以排除2016-09-11
而是包括之前它落入的日期,即2016-09-10
和下方。
請參閱documentation以獲得更深入的語法討論。
此行爲是故意的,並有堅實的原因。 daterange
是一個離散範圍類型,它意味着它將所有輸入值更改爲其規範形式。 這使得有可能以各種形式相同的範圍比較:
select '[2016-09-01,2016-09-10]'::daterange = '[2016-09-01,2016-09-11)'::daterange;
-- yields true
你可以創建自己的範圍類型:
create type mydaterange as range
(subtype=date,
subtype_diff=daterange_subdiff);
select '[2016-09-01,2016-09-10]'::daterange, '[2016-09-01,2016-09-10]'::mydaterange
daterange | mydaterange
-------------------------+-------------------------
[2016-09-01,2016-09-11) | [2016-09-01,2016-09-10]
(1 row)
,但它沒有什麼意義,因爲在這種情況下
select '[2016-09-01,2016-09-10]'::mydaterange = '[2016-09-01,2016-09-11)'::mydaterange;
-- yields false!
閱讀關於Discrete Range Types。
你確實收回你放入的東西。兩個範圍都是相同的。 '[2016-09-01,2016-09-10]':: daterange ='[2016-09-01,2016-09-11)':: daterange'產生'true' –