从VARCHAR2(欧盟标识号)中提取生日

时间:2014-06-26 20:33:42

标签: sql regex oracle varchar

我有一个看起来像这样的字符串:

1890602170089

虽然这个数字(实际类型是VARCHAR2)没有任何意义,但这里有一个简短的解释:

  • 1,第一位:1代表男性,2代表女性
  • 89 06 02:1989年6月2日
  • 170089:随机生成的我不需要的东西

我需要从此字符串中提取生日并将其转换为DATE类型。是否有任何内置可以做到这一点或我需要自己做?如果是这样,怎么办呢?

2 个答案:

答案 0 :(得分:1)

这似乎有效:

select (case when eid like '1%' then to_date('19'||substr(eid, 2, 6), 'YYYYMMDD')
             when eid like '3%' then to_date('20'||substr(eid, 2, 6), 'YYYYMMDD')
        end)
from (select '1890602170089' as eid
      from dual
     ) t;

答案 1 :(得分:1)

这似乎可以通过小提琴测试来实现。

--your original test data 06/02/1989
select date(substring(1890602170089, 2, 6))

-- 06/02/2013
select date(substring(1130602170089, 2, 6))