Sql 我只需要从varchar2数据类型中提取街道/房屋号

Sql 我只需要从varchar2数据类型中提取街道/房屋号,sql,oracle,Sql,Oracle,我们有一个名为House_Number的varchar2列,该列包含所有不同类型的数据项,如下所示。 我需要的是从左到第一次出现的数字,比如空格、特殊字符和ascii字符 以下是一些样本房屋编号: 217 3RDFL, 2173RDFL, 500D, 527 # 2ND, 527# 2ND, 5422NDFL, 5422, 30# D2, 1250 2ND, 12502ND, 217 3RDFL, 2173RDFL, 5241R, 3 2R, 32R, 5092R, 24 # 2R, 24# 2

我们有一个名为House_Number的varchar2列,该列包含所有不同类型的数据项,如下所示。 我需要的是从左到第一次出现的数字,比如空格、特殊字符和ascii字符

以下是一些样本房屋编号:

217 3RDFL, 2173RDFL, 500D, 527 # 2ND, 527# 2ND, 5422NDFL, 5422, 30# D2,
1250 2ND, 12502ND, 217 3RDFL, 2173RDFL, 5241R, 3 2R, 32R, 5092R, 24 # 2R,
24# 2R, 129 B-16, 129# B17, 129B-16, 16 # 2B, 4229B, 539# APT 3, 563 # A5,
2162A, 934-A, 109-A, 511-A, 339-REA, 339REAR
对于上述house_编号,预期的相应输出如下:

217, 217, 500, 527, 527, 542, 542, 30,1250,1250, 217, 217, 5241, 
3, 32, 5092, 24, 24, 129, 129, 129, 16, 4229, 539, 563, 2162, 
934, 109, 511, 339, 339
我尝试使用regexp_substr,但无法获得适用于上述所有不同数据输入的逻辑

如果有人能提供帮助,我将不胜感激。

使用regexp\u substr:

regexp_substr(house_number, '^[0-9]*')
匹配出现在单词开头的任何数字[0-9],使用regexp\u substr重复任意次数*

regexp_substr(house_number, '^[0-9]*')

匹配单词开头出现的任何数字[0-9]^重复任意次数*

这里是我刚刚构建的一个解决方案,您可以调整/调整: SQL:


但不知道如何将其转换为ORACLE。删除了前面的ORACLE部分,因为代码似乎不正确,不要使用ORACLE

这里是我刚刚构建的一个解决方案,您可以调整/调整: SQL:



但不知道如何将其转换为ORACLE。删除了前面的ORACLE部分,因为代码似乎不正确,请不要使用ORACLE

Post add to your question(添加到您的问题中),使用您迄今为止的最佳尝试。部分重复:注意patindex的第一个答案,这不是所有替代品的可怕答案…我在问题中没有提到…这是oracle 12c,它不是前3个数字…我们希望数字从左开始,直到第一次出现非数字,即空白,null,特殊字符和ascii字符必须使用您迄今为止的最佳尝试添加到您的问题中。部分重复:用patindex记录第一个答案,这不是所有替代品的可怕答案…我在问题中没有提到…这是oracle 12c,它不是前3个数字…我们希望数字从左开始,直到第一次出现非数字,即空白,null,特殊字符和ascii字符我没有完美的解决方案,但下面给出了最接近的解决方案…从1的顺序中选择house_编号、REGEXP_substrresplace_编号、'1/2'、'-'、'+'、'.'.、'.、'.、'?'、'^\d+'作为house_编号;我没有完美的解决方案,但下面给出了最接近的解决方案…从order by 1中选择house_编号、REGEXP_Substrresplace_编号、'1/2'、'-'、'+'、'.'、''.'?'、'^\d+'作为house_编号;感谢您提供的示例代码和您创建的测试表等。但这是针对Oracle 12C的,我认为我们需要用substr替换SUBSTRING,并用类似regexp_的格式替换PATINDEX。我没有在上面看到Oracle标记,只有SQL。很抱歉。在converter的下面添加了一个已转换的部分,因此可能有效,也可能无效。@Philip您能否确认Oracle部分是正确的snytex,它将得到与我确认的SQL部分相同的结果,该SQL部分按您的需要工作。如果可以,请告诉我……对不起,我没有提到这是针对Oracle的……但只是后来添加了一条评论。。。。感谢您提供Oracle语法…以下是一些示例数据…527 2ND 527 2ND 5422NDFL 1250 2ND 1250 2ND 12502N 16682NDFL 4226 2NDFL 42262NDFL…当我为上述示例数据运行Oracle脚本时…我得到的结果是空值…而不是捕获数字…感谢示例代码和测试您创建的表等等。但这是针对Oracle 12C的,我认为我们需要用substr替换SUBSTRING,用regexp_替换PATINDEX。我没有在上面看到Oracle标记,只有SQL。很抱歉。在converter的下面添加了一个已转换的部分,因此可能有效,也可能无效。@Philip您能否确认Oracle部分是正确的snytex,它将得到与我确认的SQL部分相同的结果,该SQL部分按您的需要工作。如果可以,请告诉我……对不起,我没有提到这是针对Oracle的……但只是后来添加了一条评论。。。。感谢您提供Oracle语法…以下是一些示例数据…527第2 527第2 5422NDFL 1250第2 1250第2 12502 12502N 16682NDFL 4226 2NDFL 42262NDFL…当我为上述示例数据运行Oracle脚本时…我得到的结果是空值…而不是捕获数字。。。。。