0

我目前正在进行一项练习,该练习将从存储在列中的一系列字符中显示特定文本,例如 TESTTEMP。字符串示例:

PROGRAMNAME|MAX2112ETI_L;PROGRAMREV|L;TESTOPTION|FR;TESTTEMP|25;STD IPH|528.63436123348

现在我需要的是在字符串TESTTEMP|之后和;. 我所做的是我提取了所有过去的文本TESTTEMP|,只得到前两个字符。不幸的是,这是不可能的,因为在某些情况下TESTTEMP|3 个字符。我有办法做到这一点吗?以下是我到目前为止的内容:

SELECT 
  SUBSTR(SUBSTR(value, INSTR(value, ';TESTTEMP|')+10), 1, 2) invalue
FROM
(
  SELECT 
    'PROGRAMNAME|MAX2112ETI_L;PROGRAMREV|L;TESTOPTION|FR;TESTTEMP|25;STD IPH|528.63436123348' VALUE 
  FROM dual
)t;
4

1 回答 1

1

找到 ; 的索引 在子字符串中并将其用作索引,而不是将其硬编码为 2。

SELECT 
  SUBSTR(SUBSTR(value, INSTR(value, ';TESTTEMP|')+10), 1, INSTR(SUBSTR(value, INSTR(value, ';TESTTEMP|')+10), ';')-1) invalue
FROM
(
  SELECT 
    'PROGRAMNAME|MAX2112ETI_L;PROGRAMREV|L;TESTOPTION|FR;TESTTEMP|25;STD IPH|528.63436123348' VALUE 
  FROM dual
)t;

如果看起来很乱,你甚至可以这样写

SELECT
  SUBSTR(VALUE, 1, INSTR(VALUE, ';') - 1) invalue
FROM
(
  SELECT
     SUBSTR(VALUE, INSTR(VALUE, ';TESTTEMP|') + 10)
     VALUE
  FROM (
      SELECT
         'PROGRAMNAME|MAX2112ETI_L;PROGRAMREV|L;TESTOPTION|FR;TESTTEMP|25;STD IPH|528.63436123348'
         VALUE
      FROM dual) t
)t;

基于评论 - 如果您想知道是否找到了字符串,请使用此查询。FOUND如果找到字符串,则将大于 0。

SELECT
  SUBSTR(VALUE, 1, INSTR(VALUE, ';')-1) invalue, FOUND
FROM
(
  SELECT
     SUBSTR(VALUE, INSTR(VALUE, SEARCHSTRING)+10) VALUE, INSTR(VALUE, SEARCHSTRING) FOUND
  FROM (
      SELECT
         'PROGRAMNAME|MAX2112ETI_L;PROGRAMREV|L;TESTOPTION|FR;TESTTEMP|25;STD IPH|528.63436123348'
         VALUE,
         ';TESTTEMP|' SEARCHSTRING
      FROM dual) t
)t;
于 2013-09-09T04:26:15.590 回答