MySQL中字符串比較大小詳解(日期字符串比較問題)

前言

數據庫中在對於數字與非數字混合的字符串,在進行大小比較的時候,如果兩字符串長度相等,那麼兩字符串就會比較相同位置的字符,比較時若字符是數字,則直接比較,若字符是非數字那麼會轉換為ascii碼進行比較,若在某位置上已經有大小之分,那麼就不會再進行比較。

如上所述,當字符串用於比較時間格式數據進行時間維度的比較時會出現問題。如以下sql進行查詢時

 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'  

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-FdmqBpj3-1641372898325)(C:\Users\ASUS\AppData\Roaming\Typora\typora-user-images\image-20220105163155854.png)]

圖1-1

如圖1-1所示,沒有查詢出任何條件

當使用日期函數把字符串轉化為日期時

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所示,查出瞭符合條件的數據

分析為何第一個sql語句沒有查詢出內容。由於該字段使用的是字符串形式存儲,因此此時比較大小采用的是字符串方式比較大小。

字符串方式比較大小是從左往右進行匹配。對於長度不同的字符串進行匹配時。較短字符串比較完後還沒有大小之分。則較長的字符串較大。如下面sql所示

select '2019-09-30 ' < '2019-09-30 00:00:00'

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-Ls9jHyI4-1641372840373)(C:\Users\ASUS\AppData\Roaming\Typora\typora-user-images\image-20220105164214829.png)]

發現此時**字符串’2019-09-30 00:00:00’**較大。因此之前的sql沒有查出日期為2019-09-30的數據

因此。在使用字符串表示時間時,需要使用時間函數進行比較。

sql提供的時間函數有:date(), str_to_date()

另外,在mysql當中,字符串類型間進行加減乘除運算的時候,會截取字符串以數字開頭的那一部分數字進行運算,如果字符串前面沒有數字,那麼就隻能截取的數值為0,那麼進行加減的時候結果都是0,進行乘除的時候結果都是NULL。

總結

到此這篇關於MySQL中字符串比較大小的文章就介紹到這瞭,更多相關MySQL字符串比較大小內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: