您好,登錄后才能下訂單哦!
這篇文章主要介紹“MySQL數據庫中varchar類型的數字比較大小的方法是什么”,在日常操作中,相信很多人在MySQL數據庫中varchar類型的數字比較大小的方法是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”MySQL數據庫中varchar類型的數字比較大小的方法是什么”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
-- ---------------------------- -- Table structure for check_test -- ---------------------------- DROP TABLE IF EXISTS `check_test`; CREATE TABLE `check_test` ( `id` int(11) NOT NULL AUTO_INCREMENT, `current_price` varchar(10) NOT NULL, `price` varchar(10) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of check_test -- ---------------------------- INSERT INTO `check_test` VALUES ('1', '12', '14'); INSERT INTO `check_test` VALUES ('2', '22', '33'); INSERT INTO `check_test` VALUES ('3', '15', '8'); INSERT INTO `check_test` VALUES ('4', '9', '7'); INSERT INTO `check_test` VALUES ('5', '12', '12.9');
我們執行如下SQL:
-- 找出current_price比price小的記錄 select * from check_test where current_price<price; select * from check_test where (current_price+0)<(price+0); -- 找出current_price比price大的記錄 select * from check_test where current_price>price; select * from check_test where (current_price+0)>(price+0);
結果如下:
我們可以看到在結果1中15>8不符合條件卻查詢到了,而結果3中15>8滿足條件卻并沒有查詢出來。
這是為什么呢?因為字符串類型的數字比較大小是從第一位開始比較其在字符編碼中對應的數值大小,相等則繼續比較第二位,不相等就是數值大的為大。其中數字字符對應的ASCII碼值如下:
例如:
如果current_price="12"、price="14",其中第1位字符"1"所對應的ASCII十進制數值都是49,二者相等,而第二位字符"2"的ASCII十進制數值是50,"4"的ASCII十進制數值是52,50<52,所以結果正確。
如果current_price="15"、price="8",其中current_price中的第1位字符"1"所對應的ASCII十進制數值是49,而price中的第1位字符"8"所對應的ASCII十進制數值是56,49<56,所以能夠查詢出來,但卻并不是我們期望的結果。
我們可以通過代碼來進行驗證,這里用的是JavaScript語言:
var current_price = "12"; var price = "14"; console.log(current_price < price);// true var current_price = "15"; var price = "8"; console.log(current_price < price);// true
所以對于可能要比較大小的數字不應該設置為varchar類型,但如果已經設置為了varchar類型,那么如果要比較則將其轉換成數值類型進行比較,在SQL中中對字段加0即可。
而如果是編程語言則需要通過對應的函數進行轉換,不能加0直接轉換,如JavaScript:
var current_price = "12"; var price = "14"; console.log(parseInt(current_price) < parseInt(price));// true var current_price = "15"; var price = "8"; console.log(parseInt(current_price) < parseInt(price));// false
注意:字符所對應的十進制數值跟其編碼有關系,但ASCII碼都被兼容。
到此,關于“MySQL數據庫中varchar類型的數字比較大小的方法是什么”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。