SAPHANA数据库中如何使⽤正则表达式
作为⼀个程序员⼩⽩,刚进公司上班两个周,我开始熟悉并参与公司的⼀个项⽬(当然,只是做⼀些最简单的查询来练练⼿啦,复杂的也不会。。。),带我的同事让我在某个表的数据列表页⾯设置⼏个按钮,来根据过期状态查询记录,于是我开始了,这个项⽬的数据库是
⽤hana来管理的,⾥⾯有两张表⾥⾯的截⽌⽇期这个字段是varchar(8)类型的⽇期格式,其中的数据有诸如‘20180101’、
‘2018/1/1’、‘00000000’、‘2018-1-1’、‘2018.1.1’、‘2018.01.’、‘’、以及‘0’这样的数据(后⾯不对,检查发现⾥⾯居然还有汉字),我需要把这些不合法的数据都过滤掉,我开始拼接sql语句,发现事情并没有这么简单,因为每个数据库的语⾳虽然⼤致相同,但是也有⼀些极⼩的差异,就⽐如今天说的正则,在mysql中是⽤"字段名 REGEXP 正则表达式"来写的,oracle中是⽤"REGEXP_LIKE(字段名,正则表达式)"来写的,⽽hana,我了n多次,也试了n多次,也翻看了⽆数次hana官⽅⽂档,都没到,只能先
⽤⼀个⼜⼀个的like关键字来排除异常数据,直到sql语句有⼗多⾏辣么长(⽤带我的同事说的⼀句话来形容就是:恶⼼,我也不想的嘛),功能总算实现了,后来还是我们经理,帮我解决了这个问题,于是,我稍加改造,将⼜臭⼜长的sql缩减成了只有3⾏的sql,嗯,说了这么多
废话,还是不如贴代码:
select * from tb_table1 where enddate like_regexpr '^(([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})(((0[13578]|1[02])(0[1-9]|[12][0-9]
为什么会有这么长的正则呢,这⾥补充⼀下,这个正则是完美匹配⽇期(包括平年闰年、⼤⽉⼩⽉都考虑进去了),嗯,顺便说⼀
regexp like句,like_regexpr 这个关键字可以同时匹配多个正则,看图:
也就是说,text字段值可以匹配this或者them,只要其中⼀个匹配上,就满⾜条件,好了,不多bb了,第⼀次发博客,溜了溜了
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论