oracle 如何只提取字符串/字符中的数字[重复]

aurhwmvo  于 2023-10-16  发布在  Oracle
关注(0)|答案(2)|浏览(134)

此问题已在此处有答案

Extract number from string with Oracle function(6个回答)
2个月前关闭。
我有一个表,在这个表中有一个名为parent_data的列,其中有一行包含几个字符,中间有一个数字。
示例:

|PARENT_DATA|
{"orderERPNumber":1093710,"orderERPPosition":"P"}

我想知道是否有一种方法可以只提取数字进行查询。
基本查询:

SELECT PARENT_DATA FROM IONV_SYNC.IONVS_CRITICAS;

回报:

{"orderERPNumber":1093710,"orderERPPosition":"P"}

所以我希望它只返回数字1093710

cbeh67ev

cbeh67ev1#

我觉得这就是JSON。在这种情况下,您应该使用JSON函数来获取值:

SELECT json_query('{"orderERPNumber":1093710,"orderERPPosition":"P"}', '$.orderERPNumber') FROM dual;

这里有更多关于json路径(我使用的$.orderERPNumber表达式)的信息。

hpcdzsge

hpcdzsge2#

创建一个从字符串中提取数字的函数

CREATE FUNCTION dbo.GetNumericFromString
(
  @stringValue VARCHAR(256)
)
RETURNS VARCHAR(256)
AS
BEGIN
  DECLARE @intValue INT
  SET @intValue = PATINDEX('%[^0-9]%', @stringValue)
  BEGIN
    WHILE @intValue > 0
    BEGIN
      SET @stringValue = STUFF(@stringValue, @intValue, 1, '' )
      SET @intValue = PATINDEX('%[^0-9]%', @stringValue )
    END
  END
  RETURN LEN(COALESCE(TRIM(CAST(ISNULL(@stringValue, 0) AS INT)),0))>0 then COALESCE(TRIM(CAST(ISNULL(@stringValue, 0) AS INT)),0) else 0 end
END
GO

然后又道:

SELECT dbo.GetNumericFromString(PARENT_DATA) FROM IONV_SYNC.IONVS_CRITICAS;

相关问题