在SQL中解析子字段

时间:2013-04-22 20:07:37

标签: sql oracle

我有下表

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列。任何人都可以推荐一个查询。

2 个答案:

答案 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;