简体   繁体   中英

Match the end half of an expersion to only letters SQL ORACLE

I've got a column of data in an SQL table and after a first pass it contains only data starting with 'BVH' and 'BVG'. I want it to only contain data that has 3 numeric characters after this and no more letters. I have tried

OUC not like 'BVG%[a-z]%' and OUC not like 'BVH%[a-z]%'

as I don't know if the letters are going to fall in the first, second or third (or multiple) positions following the first 3 letters. I also can't know exactly what letters are going to appear

Example data

    BVH122
    BVH174
    BVH336
    BVH123
    BVH447
    BVH447
    BVH321
    BVH573
    BVG1NS
    BVG1T2
    BVH283
    BVH172
    BVG12T
    BVG1T2

Is that what you need?

with dat as (select 'BVH122' a from dual
   union all select 'BVH174' a from dual
   union all select 'BVG1NS' a from dual
   union all select 'BVH172' a from dual
   union all select 'BVG12T' a from dual
)
select * from dat where regexp_like(a,'[A-Z]{3}[0-9]{3}');

So your query is:

select * from table where regexp_like(OUC,'BV[GH]{1}[0-9]{3}');

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM