真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

PostgreSQLDBA(109)-pgAdmin(Don'tdothis:Don'tuseBETWEEN)

no zuo no die系列,來自于pg的wiki。
這一節(jié)的內(nèi)容是:不要使用between。
理由是:

BETWEEN uses a closed-interval comparison: the values of both ends of the specified range are included in the result.
This is a particular problem with queries of the form
SELECT FROM blah WHERE timestampcol BETWEEN ‘2018-06-01’ AND ‘2018-06-08’;
This will include results where the timestamp is exactly 2018-06-08 00:00:00.000000, but not timestamps later in that same day. So the query might seem to work, but as soon as you get an entry exactly on midnight, you’ll end up double-counting it.
Instead, do:
SELECT FROM blah WHERE timestampcol >= ‘2018-06-01’ AND timestampcol < ‘2018-06-08’

創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務,包含不限于網(wǎng)站制作、成都網(wǎng)站設計、瑞金網(wǎng)絡推廣、小程序定制開發(fā)、瑞金網(wǎng)絡營銷、瑞金企業(yè)策劃、瑞金品牌公關、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務,您的肯定,是我們最大的嘉獎;創(chuàng)新互聯(lián)為所有大學生創(chuàng)業(yè)者提供瑞金建站搭建服務,24小時服務熱線:18980820575,官方網(wǎng)址:www.cdcxhl.com

原因是between是閉合區(qū)間,在處理日期時會丟失精度,比如日期’2018-06-08’會認為是’2018-06-08 00:00:00.000000’而不是’2018-06-08 23:59:59.999999’,下面舉例說明。

創(chuàng)建數(shù)據(jù)表并插入數(shù)據(jù)

[local]:5432 pg12@testdb=# drop table if exists t_between;
DROP TABLE
Time: 4.715 ms
[local]:5432 pg12@testdb=# create table t_between(id int,tz timestamptz);
CREATE TABLE
Time: 4.788 ms
[local]:5432 pg12@testdb=# 
[local]:5432 pg12@testdb=# insert into t_between values(1,CURRENT_TIMESTAMP);
INSERT 0 1
Time: 3.620 ms
[local]:5432 pg12@testdb=# insert into t_between values(2,now());
INSERT 0 1
Time: 2.319 ms
[local]:5432 pg12@testdb=# insert into t_between values(3,date_trunc('second',CURRENT_TIMESTAMP));
INSERT 0 1
Time: 2.542 ms
[local]:5432 pg12@testdb=# insert into t_between values(4,date_trunc('day',CURRENT_TIMESTAMP));
INSERT 0 1
Time: 2.766 ms
[local]:5432 pg12@testdb=# select * from t_between order by id;
 id |              tz               
----+-------------------------------
  1 | 2019-10-17 11:47:07.876236+08
  2 | 2019-10-17 11:47:07.881309+08
  3 | 2019-10-17 11:47:07+08
  4 | 2019-10-17 00:00:00+08
(4 rows)
Time: 1.760 ms

查詢數(shù)據(jù)

[local]:5432 pg12@testdb=# select * from t_between where tz between'2019-10-16' and '2019-10-17';
 id |           tz           
----+------------------------
  4 | 2019-10-17 00:00:00+08
(1 row)
Time: 1.691 ms
[local]:5432 pg12@testdb=# select * from t_between where tz >= '2019-10-16'  and tz < '2019-10-17';
 id | tz 
----+----
(0 rows)
Time: 1.186 ms
[local]:5432 pg12@testdb=#

用between會把值為2019-10-17 00:00:00+08的數(shù)據(jù)輸出,因此建議使用普通的比較符(>、<、=等)。

參考資料
Don’t Do This


文章標題:PostgreSQLDBA(109)-pgAdmin(Don'tdothis:Don'tuseBETWEEN)
文章URL:http://weahome.cn/article/gjpjjs.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部