前言:
在這次項目中遇到條件范圍篩選。
對某個字段做范圍查詢。
- 篩選的值數據庫存儲類型為varchar
- 是有規律的字母摻加時間數字加順序遞增的數字序號
首先這個值的篩查條件以日期做選擇范圍,Mysql語法做范圍查詢我優先選擇比較運算符。
然后就是了解Mysql字符串類型轉換。
查閱了文檔了解到,在mysql里轉化語法主要為兩個 cast 和 convert
CAST(value as type); CONVERT(value, type);
當 '123aaa' -> ‘123’; ‘abc’ -> 0 ‘abc123’ -> '0' // 遇到字母就不轉化
這時候字符串與數字比較問題已經解決了,下個問題就是對字符串進行裁剪
看了mysql的函數文檔
substring(str, star, len); // 對字符串做裁剪
最終我們的問題解決函數就出來了:
如如下一張表:
employee_list
—————————————————————
| id | name |
| AAAA20201206-00001 | xiaohong |
| AAAA20201207-00001 | xiaoming |
| AAAA20201207-00001 | xiaoming |
| AAAA20201207-00001 | xiaoming |
| AAAA20201209-00001 | xiaohuang |
—————————————————————
查詢20201206 到 20201209 區間的數據,不包括(20201206 和 20201209)
mysql語法:
SELECT * FROM employee_list where cast(substring(id, 5, 8) as SIGNED) > 20201206 AND cast(substring(id, 5, 8) as SIGNED) < 20201209;
其中:核心方法substring()方法
第一個參數接收字段名
第二個參數是要提取的索引位(從1開始)
第三個參數表示從索引位開始要再提取幾位字符
所以: substring(id, 5, 8) -> 20201206
核心方法cast()方法:
把上面提取好的字符串轉數字: cast('20201206' as SIGNED); // (數值類型)