BETWEEN 操作符
姑蘇網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)公司!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、自適應(yīng)網(wǎng)站建設(shè)等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營維護(hù)。成都創(chuàng)新互聯(lián)公司從2013年成立到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選成都創(chuàng)新互聯(lián)公司。
操作符 BETWEEN ... AND 會選取介于兩個值之間的數(shù)據(jù)范圍。這些值可以是 數(shù)值、文本或者日期
select 字段名? from ?表名? where ?字段名? between ?值1? and ?值2
在處理數(shù)值時:
在 Mysql 中使用?between and 包含邊界值,即閉區(qū)間內(nèi);
在處理文本時:
在日常處理數(shù)據(jù)時,between and的用法基本都是處理數(shù)值或者日期格式,處理字符串類型用between and 意義不大
在處理時間日期時,
在 Mysql 中使用 between and 不包含右邊界數(shù)據(jù),例如:
SELECT * FROM log_info WHERE add_time BETWEEN '2020-08-04' and '2020-08-09'
查詢出來的數(shù)據(jù)并不會包含?2020-08-09?的數(shù)據(jù),因?yàn)?Mysql 對日期的查詢是默認(rèn)?00:00:00,所以上面的時間實(shí)際是:2020-08-04 00:00:00?至?2020-08-09 00:00:00,2020-08-09?當(dāng)天的數(shù)據(jù)不在區(qū)間內(nèi),所以查詢不到。
解決方法
將右邊界日期往后推一天,如?2020-08-04?-?2020-08-10;
將右邊界時間精確到秒,如?2020-08-04?-?2020-08-09 23:59:59;
以上問題只會在字段類型為?datetime?中出現(xiàn),Mysql 本身是包含邊界的,但如果字段類型為?datetime?時,數(shù)據(jù)將會被轉(zhuǎn)換為?2020-08-04 00:00:00,而數(shù)據(jù)類型為?date?則不會出現(xiàn)上述問題。
那么如何范圍查詢內(nèi)的文本信息呢?
使用in
-- 條件查詢-范圍查詢: in(條件1,條件2) :表示在某個不連續(xù)的范圍內(nèi)
select * from goods where goods_company in('淘寶','Tmall');
mysql的sql語句中可以使用between來限定一個數(shù)據(jù)的范圍,例如:
select * from user where userId between 5 and 7;
查詢userId為5、6,7的user,userId范圍是包含邊界值的,也等同如下查詢:
select * from user where userId = 5 and userId = 7;
很多地方都提到between是給定的范圍是大于等第一值,小于第二個值,其實(shí)這是不對的。此前我一直也是這么認(rèn)為,通過實(shí)驗(yàn),結(jié)論是包含兩邊的邊界值,如果實(shí)在拿不準(zhǔn),可以采用= 、=的方式來指定條件。
另外 not between的范圍是不包含邊界值。
這是一項(xiàng)新功能,用于指定在插入或更新到一行之前檢查值的條件。如果表的任何行的搜索條件的結(jié)果為 FALSE,則約束可能返回錯誤(但如果結(jié)果為 UNKNOWN 或 TRUE,則約束不會返回錯誤)。此功能開始在 MySQL 8.0.16 上運(yùn)行,在以前的版本中,我們可以創(chuàng)建它,但它不起作用,這意味著支持語法,但不起作用。要牢記的使用規(guī)則:
AUTO_INCREMENT 自增列不允許使用
引用另一個表中的另一列不允許使用
存儲的函數(shù)和用戶定義的函數(shù)不允許使用
存儲過程和函數(shù)參數(shù)不允許使用
子查詢不允許使用
在外鍵中用于后續(xù)操作(ON UPDATE,ON DELETE)的列不允許使用
為下一條語句 INSERT,UPDATE,REPLACE,LOAD DATA 和 LOAD XML 評估此次監(jiān)測。此外,還會為 INSERT IGNORE,UPDATE IGNORE,LOAD DATA…IGNORE 和 LOAD XML…IGNORE 評估此監(jiān)測約束。對于這些語句,如果約束的評估結(jié)果為 FALSE,則會發(fā)生警告。插入或更新被跳過。
我們可以使用此功能在表中添加更多的邏輯,但是根據(jù)我以前作為程序員的經(jīng)驗(yàn),我不建議在表中添加邏輯,因?yàn)槌悄鸁o法訪問應(yīng)用程序代碼,否則很難找到或調(diào)試錯誤。