最近,我被StackOverflow用戶告知,使用BETWEEN
運算符的值爲數據類型timestamp without time zone
不應該使用。以下是報價。在Postgres中使用BETWEEN運算符與時間戳值
平均值> =和< =,不得與包含時間戳的範圍一起使用。
當被問及對本文或者Postgres的文檔的鏈接的說明,它指出,我得到的回答說
爲什麼會這麼簡單的東西需要用文檔的站點。我相信你可以找到很多無論如何,如果你谷歌(至少我在各種論壇上展示的情況下我的詳細帖子)
嗯,我用Google搜索。並沒有發現任何建議不要使用帶有時間戳值的運算符。實際上SO上的this answer使用它們,this mailing group post也是如此。
我被告知,這些年來我做錯了。這是真的嗎?
據我所知,Postgres的時間戳最大精度爲1 microsecond
- 糾正我,如果我錯了。因此,下面的陳述不等於?
sample_date BETWEEN x AND y::timestamp - INTERVAL '1 microsecond'
和
sample_date >= x AND sample_date < y
編輯:樣品只是一個考慮的差異。我意識到開發人員可能會錯過時間部分,但假設一個人知道它的行爲如何,爲什麼它不應該使用?一般來說,這只是一個樣本,但我想知道更大的範圍。我一直在調查策劃者,它似乎在解析BETWEEN
至>= AND <=
。
爲什麼最好在結果中寫下>= AND <=
而不是BETWEEN
- 不包括翻譯時間?
第二種方式更可取。它不會對底層實現做任何假設(加上它更短,更易於閱讀)。這裏有一篇關於在SQL Server中使用'between'的博客文章。許多觀點也適用於Postgres:http://sqlblog.com/blogs/aaron_bertrand/archive/2011/10/19/what-do-between-and-the-devil-have-in-common.aspx。 –
@GordonLinoff感謝您的意見。這個例子只是考慮兩個語句之間的區別。這裏的主要問題是詢問用戶是否正確地指出BETWEEN不應該(通常)與時間戳一起使用 - 而不僅僅是提到的情況。我會確保閱讀那篇文章,再次感謝。 –
你可以使用它,但它很笨拙和醜陋,而且由於它使用了epsilon'a BETWEEN a和b-epsilon',它將取決於epsilon。半開區間't> = c1 AND t = c2 AND t2 = c1 AND t
joop