好久之前就有写BOLG的打算,写的目的不是为了宣传本身,写——是为了本身更好的理解
废话少说,来个×××做,先写个数据库的东西吧。
最近在一些通信项目的业务逻辑中常常用到号段表,业务逻辑中须要经过数据库查询获得号码的归属地,早些时候也看了一些“高手”的代码,太复杂了,看了后我都晕了,真难想象这些高手是怎么想出来的办法。。。。。
HR表
id |
areaCode |
areaName |
telDivision |
1 |
028 |
成都 |
198028 |
2 |
0839 |
广元 |
1891234 |
3 |
0931 |
兰州 |
1336945 |
4 |
0931 |
兰州 |
1891931 |
5 |
0931 |
兰州 |
1898931 |
6 |
0930 |
临夏 |
1890930 |
7 |
0938 |
天水 |
1980938 |
当电话呼入时我须要根据主叫号码判断主叫所属地区,
关键的问题号段telDivision这个字段存储的内容长度是可变的,怎么办呢,有人曾用一个存储过程来解决,把主叫号码做为参数传入,再将号段表所有读出,经过游标逐个比较,看了他的代码后我以为状况没这么糟糕,应该有捷径可寻,在google上翻了个遍,没有找到任何资料,因而决定本身动手解决这个问题,凭本身感受和经验解决它
咱们通常模糊匹配都用的是 like做条件查询,日常使用是数据库内存储的内容要多,查询条件内容少,用LIKE模糊匹配马上解决,但咱们逆向思惟想一下,能不能把条件处理一下,将内容和字段换个位置呢?实践证实,能够
select * from HR where telDivision+'%' like '18993100001'
上机测试一切OK!
第一次写技术文章,写的不清楚的地方但愿提出问题你们交流,不要骂我哈,否则跟你急,嘿嘿嘿。