我有下表
DRIVER_GID DRIVER_REFNUM_QUAL_GID
SDL2/C001.100000 SDL2.486900 CURRENT DISTRICT
SDL2/C001.100000 SDL2.486900 PERMANENT DISTRICT
SDL2/C001.100000000 SDL2.486900 CURRENT DISTRICT
SDL2/C001.100000000 SDL2.486900 PERMANENT DISTRICT
SDL2.600119036 SDL2.436001 CURRENT DISTRICT
SDL2.600119036 SDL2.436001 PERMANENT DISTRICT
我需要在字符串“SDL2”之后提取数值。来自DRIVER_REFNUM_QUAL_GID列。任何人都可以推荐一个查询。
答案 0 :(得分:1)
使用 regexp_substr
的ORACLE
功能:
select regexp_substr(DRIVER_REFNUM_QUAL_GID, '[[:digit:]]{6}') from YOURTABLE
这将从您的yourtable的DRIVER_REFNUM_QUAL_GID列中提取相邻的6位数字。
如果您希望提取句点后的所有数字,请使用以下代码:
select regexp_substr(DRIVER_REFNUM_QUAL_GID, '(\.)([[:digit:]]+)',1,1,'i',2) from YOURTABLE
要取消NULLS
,您可以使用NVL
功能。
例如,
select NVL(regexp_substr(DRIVER_REFNUM_QUAL_GID, '(\.)([[:digit:]]+)',1,1,'i',2),999999) from YOURTABLE
因此,如果regexp_substr
函数的结果为NULL
,则结果为999999
。
答案 1 :(得分:0)
考虑到您只需要SDL2.
之后的数字,并且考虑到数字位数最多可达20位数,您可以使用类似的内容 -
select REGEXP_SUBSTR('SDL2.486900 CURRENT DISTRICT', '[[:digit:]]{2,20}') numval from dual;
您可以修改数字20
以满足您的需求。
所以它看起来像 -
select REGEXP_SUBSTR(DRIVER_REFNUM_QUAL_GID,'[[:digit:]]{2,20}') from your_table;