sql查詢日期時間範圍的方法,sql查詢日期時間範圍

問題描述

都知道between and查詢是包含上下邊界的, 但是在遇到

形如

select 字段1, 字段2 from table_xxx where 時間字段 between 開始時間 and 結束時間

的日期查詢時, 查詢結果可能會出乎意料.

(注意: 使用的數據庫是MariaDB(MySQL), 時間字段 是 DATETIME 類型)

比如: select 字段1, 字段2 from table_xxx where 時間字段 between ‘2021-05-01’ and ‘2021-05-10’ 的查詢結果中,

包含2021-05-01的記錄, 但並不包含2021-05-10最後一天的記錄,

好像between and的邊界原則失效了, 這是這麼回事呢?

問題解答

實際上, between and的查詢邊界並沒有改變, 還是老樣子, 只是我們在日期查詢時, 一開始把問題想簡單了, 實際上還是對於字段類型把握的準確性.

由於時間字段是DATETIME類型, 我們來仔細看看DATETIME數據類型:

DATETIME

A date and time combination. 

MariaDB displays DATETIME values in 'YYYY-MM-DD HH:MM:SS.ffffff' format, 
but allows assignment of values to DATETIME columns using either strings or numbers.

MariaDB stores values that use the DATETIME data type in a format that supports values 
between 1000-01-01 00:00:00.000000 and 9999-12-31 23:59:59.999999.

以上對DATETIME的描述摘自:
https://mariadb.com/kb/en/datetime/ 頁面

由此可知, 語句between ‘2021-05-01’ and ‘2021-05-10’

會被MariaDB數據庫轉換為

between ‘2021-05-01 00:00:00.000000’ and ‘2021-05-10 00:00:00.000000’.

這樣當然不會包含05-10這一天的記錄.

所以, 問題還是出在 查詢條件 寫得不夠嚴謹, 不要偷懶, 寫成下面語句

between ‘2021-05-01 00:00:00’ and ‘2021-05-10 23:59:59’

就能達到我們想要得目標結果了, 如果數據很多, 時間顆粒度要求高, 也可寫成

between ‘2021-05-01 00:00:00.000000’ and ‘2021-05-10 23:59:59.999999’

就完美了!

原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/228126.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
投稿專員的頭像投稿專員
上一篇 2024-12-09 21:31
下一篇 2024-12-09 21:31

相關推薦

發表回復

登錄後才能評論