在Oracle中如何在第一个和第二个空格后获取子字符串
我在oracle中遇到了一个问题,即我的保单编号为在Oracle中如何在第一个和第二个空格后获取子字符串,oracle,oracle11g,Oracle,Oracle11g,我在oracle中遇到了一个问题,即我的保单编号为'125896547 0101',我需要一个子字符串为'125896547'。应删除数字后的第一个空格和第二个空格。我将查询用作 substr(RC_POLICY_NO,1,instr(RC_POLICY_NO,'')) 这不起作用,请建议。您可以使用,从您的值中获取第一个连续数字字符串: regexp_substr(RC_POLICY_NO, '\d+') 或第一个和第二个空格块之间的所有字符: regexp_substr(RC_POL
'125896547 0101'
,我需要一个子字符串为'125896547'
。应删除数字后的第一个空格和第二个空格。我将查询用作
substr(RC_POLICY_NO,1,instr(RC_POLICY_NO,''))
这不起作用,请建议。您可以使用,从您的值中获取第一个连续数字字符串:
regexp_substr(RC_POLICY_NO, '\d+')
或第一个和第二个空格块之间的所有字符:
regexp_substr(RC_POLICY_NO, '[^ ]+')
快速演示:
with t (RC_POLICY_NO) as (select ' 125896547 0101' from dual)
select regexp_substr(RC_POLICY_NO, '\d+'), regexp_substr(RC_POLICY_NO, '[^ ]+')
from t;
REGEXP_SU REGEXP_SU
--------- ---------
125896547 125896547
您可以使用普通的substr()
,但您需要搜索spave,而不是像当前那样搜索null;要删除前导空格,可以先修剪它:
substr(ltrim(RC_POLICY_NO), 1, instr(ltrim(RC_POLICY_NO), ' ') - 1)
该方法的演示:
with t (RC_POLICY_NO) as (select ' 125896547 0101' from dual)
select substr(ltrim(RC_POLICY_NO), 1, instr(ltrim(RC_POLICY_NO), ' ') - 1)
from t;
SUBSTR(LT
---------
125896547
假设在您想要的字符串后面总是有一个空格;如果您可能从一个没有两个字符块的值开始,那么您需要做更多的工作
如果这是您经常要做的事情,那么添加一个虚拟列和/或基于函数的索引可能是值得的,这样您就可以更轻松地搜索特定值。您可以这样做,从值中获取第一个连续数字字符串:
regexp_substr(RC_POLICY_NO, '\d+')
或第一个和第二个空格块之间的所有字符:
regexp_substr(RC_POLICY_NO, '[^ ]+')
快速演示:
with t (RC_POLICY_NO) as (select ' 125896547 0101' from dual)
select regexp_substr(RC_POLICY_NO, '\d+'), regexp_substr(RC_POLICY_NO, '[^ ]+')
from t;
REGEXP_SU REGEXP_SU
--------- ---------
125896547 125896547
您可以使用普通的substr()
,但您需要搜索spave,而不是像当前那样搜索null;要删除前导空格,可以先修剪它:
substr(ltrim(RC_POLICY_NO), 1, instr(ltrim(RC_POLICY_NO), ' ') - 1)
该方法的演示:
with t (RC_POLICY_NO) as (select ' 125896547 0101' from dual)
select substr(ltrim(RC_POLICY_NO), 1, instr(ltrim(RC_POLICY_NO), ' ') - 1)
from t;
SUBSTR(LT
---------
125896547
假设在您想要的字符串后面总是有一个空格;如果您可能从一个没有两个字符块的值开始,那么您需要做更多的工作
如果这是您经常要做的事情,那么添加一个虚拟列和/或基于函数的索引可能是值得的,这样您就可以更轻松地搜索特定值。我没有Oracle实例来检查这一点,但这是一开始导致您出现问题的空间吗 代码从空格字符的第一个字符到第一个实例,空格字符也是字符串中的第一个字符 试着先修一下
substr(LTRIM((RC_POLICY_NO,1,instr(RC_POLICY_NO,'')),' ')
我没有一个Oracle实例来检查这一点,但它是一开始导致您的问题的空间 代码从空格字符的第一个字符到第一个实例,空格字符也是字符串中的第一个字符 试着先修一下
substr(LTRIM((RC_POLICY_NO,1,instr(RC_POLICY_NO,'')),' ')
您可以使用下面的查询选择空格前的数字
SELECT
REGEXP_SUBSTR ( RC_POLICY_NO , '[^ ]+' , 1 , 1 ),
FROM DUAL ;
例如,执行上述查询时的输出为125896547。您可以使用以下查询选择空格前的数字
SELECT
REGEXP_SUBSTR ( RC_POLICY_NO , '[^ ]+' , 1 , 1 ),
FROM DUAL ;
例如,执行上述查询时的输出为125896547。第一个空格和第二个空格?你能详细说明一下吗?您的意思是要删除空格和空格后的数字(在您的示例中为0101)保单编号之间有两个空格吗?你的要求是把空格前的数字写对吗?第一个空格和第二个空格?你能详细说明一下吗?您的意思是要删除空格和空格后的数字(在您的示例中为0101)保单编号之间有两个空格吗?您的要求是在空格前输入正确的数字?我使用您的查询作为选择RC_付款方式、RC_保单编号、从D040100开始投保的RC_,其中substr(RC_保单编号,“\d+”)='6306582';但是给予是无效的number@Mandrek-再次查看-我使用了
regexp\u substr()
,而不是substr()
。我使用您的查询作为选择RC\u付款方法、RC\u保单号、从D040100开始投保的RC\u,其中substr(RC\u保单号,“\d+”)='6306582';但是给予是无效的number@Mandrek-再看看-我用的是regexp\u substr()
,而不是substr()
。