注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

天朝布衣田中码农参上

苦逼码农的点点滴滴,请多多指教!

 
 
 

日志

 
 
 
 

Mysql查找文件后辍名的取巧办法  

2016-08-13 11:22:16|  分类: Mysql |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
相信大家都遇到过这种情况,需要针对不同的文件名后辍来做相应的后续处理。如果是菜鸟,他们取相应的后辍名的办法可能如下:

select substr('593668.jpg',LOCATE('.','593668.jpg')+1) from dual;

执行结果看起来也是正常的。
Mysql查找文件后辍名的取巧办法 - sinsunson - 天朝布衣田中码农参上
这个写法应该很常见,查找到.的位置取之后的字符串。如果有点经验的话,肯定可以看出这种写法有很大的问题。遇到那种不按常规出牌的用户,那么就可以碰上这样的。

select substr('593668.doc.jpg',LOCATE('.','593668.doc.jpg')+1) from dual;

执行结果就不那么美妙了。
Mysql查找文件后辍名的取巧办法 - sinsunson - 天朝布衣田中码农参上
那么小伙们给我改进的写法是:

select REVERSE(substr(REVERSE('593668.doc.jpg'),1,LOCATE('.',REVERSE('593668.doc.jpg'))-1)) from dual;

确实达成了目的,然后我跟小伙伴说,这语句这么复杂,就不能够简单一点吗。他想了想,又做出来了改进。

select right('593668.doc.jpg',3) from dual;

这次确定达成了目标,但是他忘记了,这世间还有后辍后是.docx,.xlsx,pptx的文件。所以这条语句还得改进。

select replace(right('593668.doc.docx',4),'.','') from dual;

最终这条件语句同样能够达成了目的。但是需求可不是这样说的啊,问题又来了,要找出数据库中的所在类似于.pdf,.doc,.docx,xls,.xlsx,.ppt,.pptx的文件。小伙伴们写的语句如下[这里假设表名为file,相关字段为filename]:

select * from file where filename like '%.pdf' or filename like '%.doc' or filename like '%.docx' or filename like '%.xls' or filename like '%.xlsx' or filename like '%.ppt' or filename like '%.pptx';

确实达成了目的,不过,这语句效率也太低了,那么改进下。

select * from file where replace(right(filename,4),'.','')='pdf' or replace(right(filename,4),'.','')='doc' or replace(right(filename,4),'.','')='docx' or replace(right(filename,4),'.','')='xls' or replace(right(filename,4),'.','')='xlsx' or replace(right(filename,4),'.','')='ppt' or replace(right(filename,4),'.','')='ppx';

虽然利用=代替了like,性能有所提升,但是问题还是存在啊,语句也太长了,小伙伴开动脑子继续改进。

select * from file where INSTR('.pdf.docx.xlsx.pptx',right(filename,4));

这下就成了,大家能够看出其中的奥秘吗,哈哈,算不算一个取巧办法啊!
  评论这张
 
阅读(1)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018