MySQL中字符串比較大小詳解(日期字符串比較問題)
前言
數(shù)據(jù)庫中在對(duì)于數(shù)字與非數(shù)字混合的字符串,在進(jìn)行大小比較的時(shí)候,如果兩字符串長度相等,那么兩字符串就會(huì)比較相同位置的字符,比較時(shí)若字符是數(shù)字,則直接比較,若字符是非數(shù)字那么會(huì)轉(zhuǎn)換為ascii碼進(jìn)行比較,若在某位置上已經(jīng)有大小之分,那么就不會(huì)再進(jìn)行比較。
如上所述,當(dāng)字符串用于比較時(shí)間格式數(shù)據(jù)進(jìn)行時(shí)間維度的比較時(shí)會(huì)出現(xiàn)問題。如以下sql進(jìn)行查詢時(shí)
select * FROM work_day_content as wdc WHERE wdc.work_day >= '2019-09-30 00:00:00' AND wdc.work_day<= '2019-10-06 00:00:00'
![[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-FdmqBpj3-1641372898325)(C:\Users\ASUS\AppData\Roaming\Typora\typora-user-images\image-20220105163155854.png)]](http://img.jbzj.com/file_images/article/202208/2022083111085923.png)
? 圖1-1
如圖1-1所示,沒有查詢出任何條件
當(dāng)使用日期函數(shù)把字符串轉(zhuǎn)化為日期時(shí)
select * FROM work_day_content as wdc where date(wdc.work_day) >= date('2019-09-30 00:00:00' ) AND date(wdc.work_day)<= date('2019-09-30 00:00:00' ) 
? 圖1-2
如圖1-2所示,查出了符合條件的數(shù)據(jù)
分析為何第一個(gè)sql語句沒有查詢出內(nèi)容。由于該字段使用的是字符串形式存儲(chǔ),因此此時(shí)比較大小采用的是字符串方式比較大小。
字符串方式比較大小是從左往右進(jìn)行匹配。對(duì)于長度不同的字符串進(jìn)行匹配時(shí)。較短字符串比較完后還沒有大小之分。則較長的字符串較大。如下面sql所示
select '2019-09-30 ' < '2019-09-30 00:00:00'
![[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-Ls9jHyI4-1641372840373)(C:\Users\ASUS\AppData\Roaming\Typora\typora-user-images\image-20220105164214829.png)]](http://img.jbzj.com/file_images/article/202208/2022083111085925.png)
發(fā)現(xiàn)此時(shí)**字符串’2019-09-30 00:00:00’**較大。因此之前的sql沒有查出日期為2019-09-30的數(shù)據(jù)
因此。在使用字符串表示時(shí)間時(shí),需要使用時(shí)間函數(shù)進(jìn)行比較。
sql提供的時(shí)間函數(shù)有:date(), str_to_date()
另外,在mysql當(dāng)中,字符串類型間進(jìn)行加減乘除運(yùn)算的時(shí)候,會(huì)截取字符串以數(shù)字開頭的那一部分?jǐn)?shù)字進(jìn)行運(yùn)算,如果字符串前面沒有數(shù)字,那么就只能截取的數(shù)值為0,那么進(jìn)行加減的時(shí)候結(jié)果都是0,進(jìn)行乘除的時(shí)候結(jié)果都是NULL。
總結(jié)
到此這篇關(guān)于MySQL中字符串比較大小的文章就介紹到這了,更多相關(guān)MySQL字符串比較大小內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
windows下安裝、卸載mysql服務(wù)的方法(mysql 5.6 zip解壓版安裝教程)
這篇文章主要介紹了windows下安裝、卸載mysql服務(wù)的方法(zip解壓版安裝),需要的朋友可以參考下2016-06-06
mysql中異常錯(cuò)誤ERROR:2002的解決方法
最近在啟動(dòng)mysql的時(shí)候發(fā)現(xiàn)mysql報(bào)錯(cuò)了,錯(cuò)誤代碼是2002,通過查找相關(guān)的資料發(fā)現(xiàn)是var/lib/mysql 的訪問權(quán)限問題,所以這篇文章主要介紹了mysql中異常錯(cuò)誤ERROR:2002的解決方法,需要的朋友可以參考借鑒,下面來一起看看吧。2017-03-03
mysql中GROUP_CONCAT的使用方法實(shí)例分析
這篇文章主要介紹了mysql中GROUP_CONCAT的使用方法,結(jié)合實(shí)例形式分析了MySQL中GROUP_CONCAT合并查詢結(jié)果的相關(guān)操作技巧,需要的朋友可以參考下2020-02-02
Linux中使用mysqladmin extended-status配合Linux命令查看MySQL運(yùn)行狀態(tài)
這篇文章主要介紹了Linux中使用mysqladmin extended-status配合Linux命令查看MySQL運(yùn)行狀態(tài),需要的朋友可以參考下2014-08-08
MySQL數(shù)據(jù)庫 Load Data 多種用法
這篇文章主要介紹MySQL數(shù)據(jù)庫中 Load Data 數(shù)據(jù)的幾種種用法,需要的朋友可以參考下面文章的解說2021-08-08

