文章插圖

文章插圖
問題描述
都知道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的查詢邊界并沒有改變, 還是老樣子, 只是我們在日期查詢時, 一開始把問題想簡單了, 實際上還是對于字段類型把握的準確性.
【sql查詢日期時間范圍的數量 sql語句查詢日期時間范圍】由于時間字段是DATETIME類型, 我們來仔細看看DATETIME數據類型:
DATETIMEA 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’
就完美了!
- mysql數據庫三種備份方式 mysql數據備份通常有哪幾種方式
- 貸款查詢記錄多久消除 征信個人查詢記錄多久消除
- java 鏈接 mysql java怎么鏈接數據庫
- sql刪除被約束的語句 sql刪除約束
- sql查看表中字段數據類型 數據庫表查看表字段類型
- mysql好還是oracle好 mysql和oracle哪個性能更好
- php里輸出數據庫數據函數 php數據庫查詢結果處理
- 如何查詢域名的ip 根據ip地址查詢域名
- 下載mysql安裝包后怎么打開 mysql安裝包的下載及安裝步驟
- Mysql數據遷移到es mysql數據遷移到mysql
