如何从oracle字符串中提取日期格式
我试图从数据库中找出有多少人的身份证过期,数据格式如下:如何从oracle字符串中提取日期格式,oracle,date,Oracle,Date,我试图从数据库中找出有多少人的身份证过期,数据格式如下: CI+OT+1x78xx+POL.SLATINA+29-08-2003+14-07-2013 或 因此,它被分隔为+5倍(其中一些不会过期) 我已经这么做了,但它不起作用 select set_act_id_1, to_number(sysdate-to_date(substr(set_act_id_1,instr(set_act_id_1,'+',1,5)+1,length(set_act_id_1)),'DD-MM-YYYY'))
CI+OT+1x78xx+POL.SLATINA+29-08-2003+14-07-2013
或
因此,它被分隔为+5倍(其中一些不会过期)
我已经这么做了,但它不起作用
select
set_act_id_1,
to_number(sysdate-to_date(substr(set_act_id_1,instr(set_act_id_1,'+',1,5)+1,length(set_act_id_1)),'DD-MM-YYYY'))
from STAGE.CUSTOMERS
where set_act_id_1 is not null
group by set_act_id_1
having sysdate-to_date(substr(set_act_id_1,instr(set_act_id_1,'+',1,5)+1,length(set_act_id_1)),'DD-MM-YYYY')<0;
选择
设置动作id 1,
to编号(sysdate-to date(substr(set-act-id-1,instr(set-act-id-1,'+',1,5)+1,长度(set-act-id-1)),'DD-MM-YYYY'))
来自舞台上的顾客
其中set_act_id_1不为空
分组依据集合\u动作\u标识\u 1
具有sysdate-to-date(substr(set-act-id-1,instr(set-act-id-1,“+”,1,5)+1,长度(set-act-id-1)),DD-MM-YYYY)
或
更新:
SELECT CASE
WHEN REGEXP_LIKE( expiry_date, '^\d{1,2}[ \/-](JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)[ \/-]\d{4}$', 'i' )
THEN TO_DATE( expiry_date, 'dd mon yyyy' )
WHEN REGEXP_LIKE( expiry_date, '^\d{1,2}[ \/-](JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)[ \/-]\d{2}$', 'i' )
THEN TO_DATE( expiry_date, 'dd mon yy' )
WHEN REGEXP_LIKE( expiry_date, '^(0?[1-9]|[12]\d|3[01])[ \/-](0?[1-9]|1[0-2])[ \/-]\d{4}$' )
THEN TO_DATE( expiry_date, 'dd mm yyyy' )
WHEN REGEXP_LIKE( expiry_date, '^(0?[1-9]|1[0-2])[ \/-](0?[1-9]|[12]\d|3[01])[ \/-]\d{4}$' )
THEN TO_DATE( expiry_date, 'mm dd yyyy' )
WHEN REGEXP_LIKE( expiry_date, '^(0?[1-9]|[12]\d|3[01])[ \/-](0?[1-9]|1[0-2])[ \/-]\d{2}$' )
THEN TO_DATE( expiry_date, 'dd mm yy' )
WHEN REGEXP_LIKE( expiry_date, '^(0?[1-9]|1[0-2])[ \/-](0?[1-9]|[12]\d|3[01])[ \/-]\d{2}$' )
THEN TO_DATE( expiry_date, 'mm dd yy' )
ELSE NULL
END AS expiry_date
FROM (
SELECT set_act_id_1,
SUBSTR( set_act_id_1, INSTR( set_act_id_1, '+', 1, 5 ) + 1 ) As expiry_date
FROM STAGE.CUSTOMERS
WHERE set_act_id_1 is not null
)
或
更新:
SELECT CASE
WHEN REGEXP_LIKE( expiry_date, '^\d{1,2}[ \/-](JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)[ \/-]\d{4}$', 'i' )
THEN TO_DATE( expiry_date, 'dd mon yyyy' )
WHEN REGEXP_LIKE( expiry_date, '^\d{1,2}[ \/-](JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)[ \/-]\d{2}$', 'i' )
THEN TO_DATE( expiry_date, 'dd mon yy' )
WHEN REGEXP_LIKE( expiry_date, '^(0?[1-9]|[12]\d|3[01])[ \/-](0?[1-9]|1[0-2])[ \/-]\d{4}$' )
THEN TO_DATE( expiry_date, 'dd mm yyyy' )
WHEN REGEXP_LIKE( expiry_date, '^(0?[1-9]|1[0-2])[ \/-](0?[1-9]|[12]\d|3[01])[ \/-]\d{4}$' )
THEN TO_DATE( expiry_date, 'mm dd yyyy' )
WHEN REGEXP_LIKE( expiry_date, '^(0?[1-9]|[12]\d|3[01])[ \/-](0?[1-9]|1[0-2])[ \/-]\d{2}$' )
THEN TO_DATE( expiry_date, 'dd mm yy' )
WHEN REGEXP_LIKE( expiry_date, '^(0?[1-9]|1[0-2])[ \/-](0?[1-9]|[12]\d|3[01])[ \/-]\d{2}$' )
THEN TO_DATE( expiry_date, 'mm dd yy' )
ELSE NULL
END AS expiry_date
FROM (
SELECT set_act_id_1,
SUBSTR( set_act_id_1, INSTR( set_act_id_1, '+', 1, 5 ) + 1 ) As expiry_date
FROM STAGE.CUSTOMERS
WHERE set_act_id_1 is not null
)
1) 您使用的是哪个版本的Oracle?2) 因此,第一个将过期,因为14-07-2013
小于当前日期,第二个将永远不会过期,因为+
之后的第五个位置为空?toad代表oracle 12.101)您使用的是哪一个oracle版本?2) 所以第一个是过期的,因为14-07-2013
小于当前日期,第二个永远不会过期,因为+
之后的第五个位置为空?toad for oracle 12.10不,我有很多日期格式,如PT+ROU+0521xx942+ILFOV+2013年9月23日+2018年9月23日或CI+GG+37xx29+SPCJEP-GIURGIU+2014年12月9日+2074年7月18日或CI+XH+9525xx+SPCLEP-ORADEA+2014年7月25日+2024年12月6日,我需要一个有4个病例的功能,但是我不知道如何开始…对于第二个查询:ORA-01858:在数字的位置发现了一个非数字字符expected@AdyLacanUpdatedORA-01847:月日必须介于1和月底之间:(@Seyran OP似乎正在获取字符串的最后一个+
分隔值-因此您需要做的就是找到第5个+
字符的位置,然后获取它后面的所有子字符串。不,我有很多日期格式,比如PT+ROU+0521xx942+ILFOV+23-Sep-2013+23-Sep-2018或CI+GG+37xx29+SPCJEP-GIURGIU+09/2014+2074年7月18日或CI+XH+9525xx+SPCLEP ORADEA+2014年7月25日+2024年12月6日我需要一个包含4个案例的函数,但我不知道如何启动…对于第二个查询:ORA-01858:在数字的位置发现了一个非数字字符expected@AdyLacanUpdatedORA-01847:月日必须介于1和月底之间:(@Seyran OP似乎正在获取字符串的最后一个+
分隔值-因此您需要做的就是找到第5个+
字符的位置,然后获取它后面的所有子字符串。
SELECT set_act_id_1,
TO_DATE( SUBSTR( set_act_id_1, INSTR( set_act_id_1, '+', 1, 5 ) + 1 ), 'DD-MM-YYYY' )
FROM STAGE.CUSTOMERS
WHERE set_act_id_1 is not null
SELECT CASE
WHEN REGEXP_LIKE( expiry_date, '^\d{1,2}[ \/-](JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)[ \/-]\d{4}$', 'i' )
THEN TO_DATE( expiry_date, 'dd mon yyyy' )
WHEN REGEXP_LIKE( expiry_date, '^\d{1,2}[ \/-](JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)[ \/-]\d{2}$', 'i' )
THEN TO_DATE( expiry_date, 'dd mon yy' )
WHEN REGEXP_LIKE( expiry_date, '^(0?[1-9]|[12]\d|3[01])[ \/-](0?[1-9]|1[0-2])[ \/-]\d{4}$' )
THEN TO_DATE( expiry_date, 'dd mm yyyy' )
WHEN REGEXP_LIKE( expiry_date, '^(0?[1-9]|1[0-2])[ \/-](0?[1-9]|[12]\d|3[01])[ \/-]\d{4}$' )
THEN TO_DATE( expiry_date, 'mm dd yyyy' )
WHEN REGEXP_LIKE( expiry_date, '^(0?[1-9]|[12]\d|3[01])[ \/-](0?[1-9]|1[0-2])[ \/-]\d{2}$' )
THEN TO_DATE( expiry_date, 'dd mm yy' )
WHEN REGEXP_LIKE( expiry_date, '^(0?[1-9]|1[0-2])[ \/-](0?[1-9]|[12]\d|3[01])[ \/-]\d{2}$' )
THEN TO_DATE( expiry_date, 'mm dd yy' )
ELSE NULL
END AS expiry_date
FROM (
SELECT set_act_id_1,
SUBSTR( set_act_id_1, INSTR( set_act_id_1, '+', 1, 5 ) + 1 ) As expiry_date
FROM STAGE.CUSTOMERS
WHERE set_act_id_1 is not null
)