【问题标题】:Get the value using substr and instr in oracle在 oracle 中使用 substr 和 instr 获取值
【发布时间】:2017-05-22 01:09:25
【问题描述】:

我在表中有以下值。

  1. aaaaaa 26G 2.0G 23G 8 tmp
  2. tmpfs 506M 0 506M 0 /dev/shm

我需要将第一个值('aaaaaa' 和'tmpfs')和第二个值(26 和 506)存储在另一个表中。我得到了第一个价值 CAST(substr(COL_1,1,InStr(COL_1,' ')-1) AS VARCHAR2(10)) col

如何使用 substring 和 instring 获得第二个值,例如 26 和 506?

【问题讨论】:

    标签: c# sql oracle


    【解决方案1】:

    我会推荐regexp_substr()

    select regexp_substr(col1, '[^ ]+ ', 1, 1) as first,
           regexp_substr(col1, '[^ ]+ ', 1, 2) as second
    

    这将返回末尾带有空格的值。我认为该模式可以在没有空格的情况下工作,因为正则表达式匹配在 Oracle 中是贪婪的:

    select regexp_substr(col1, '[^ ]+', 1, 1) as first,
           regexp_substr(col1, '[^ ]+', 1, 2) as second
    

    【讨论】:

    • 你可以使用replace,也可以再次使用substr()甚至regexp_substr()
    【解决方案2】:

    instr 有一个可选参数,您可以在其中指定要搜索的特定字符串的第 n 次出现。

    CAST(substr(COL_1,InStr(COL_1,' ',1,1)+1,InStr(COL_1,' ',1,2)-InStr(COL_1,' ',1,1)-1) AS VARCHAR2(10)) 
    

    要仅从该子字符串中提取数字,请使用regexp_substr。这假设字母总是跟在一个或多个数字字符之后。

    regexp_substr(CAST(substr(COL_1,InStr(COL_1,' ',1,1)+1,InStr(COL_1,' ',1,2)-InStr(COL_1,' ',1,1)-1) AS VARCHAR2(10)),'\d+')
    

    【讨论】:

    • 它没有返回任何东西,我需要将第二个值作为 26 和 506 等等......
    • 我先发布后编辑了它。尝试最新版本。
    • aaaaaa 26G 2.0G 23G 8 tmp 我需要从第二列获取 26。它返回 null 与您提供的上述解决方案...
    • 很好,它现在可以工作了,但我不想要 G 和 M 字母,只想要数字..
    • 你会一直只有一封信吗?
    猜你喜欢
    • 2021-06-17
    • 1970-01-01
    • 1970-01-01
    • 2015-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-01
    • 2018-09-25
    相关资源
    最近更新 更多