如何在oracle查询的输出中获取特定单词

时间:2015-07-28 04:02:53

标签: sql oracle oracle11g substr

如果我发送一个像

这样的查询
eg: 1990

然后我在下面得到这个结果..

select message_text
from x$dbgalert;

但是我想在上面的结果中得到一个特定的词,意思是“ORA-1501 signalled during: CREATE DATABASE "NEWDB" ,MAXINSTANCES 1 ,MAXLOGHISTORY 1 ,MAXLOGFILES 16 ”。

我想要的是我想看到的单个或几个特殊单词 在长句中包括许多单词。

1 个答案:

答案 0 :(得分:1)

您可以使用 SUBSTR INSTR

例如,假设您的表中有3行,其中只有2行具有ORA-错误编号。

SQL> WITH DATA(str) AS(
  2  SELECT 'ORA-1501 signalled during: CREATE DATABASE  "NEWDB"
  3            ,ORA- 1
  4            ,MAXLOGHISTORY 1
  5            ,MAXLOGFILES 16' FROM dual UNION ALL
  6  SELECT 'ORA-1999 signalled during: DROP DATABASE  "NEWDB"
  7            ,MAXINSTANCES 1
  8            ,MAXLOGHISTORY 1
  9            ,MAXLOGFILES 16' FROM dual UNION ALL
 10  SELECT 'signalled during: DROP DATABASE  "NEWDB"
 11            ,MAXINSTANCES 1
 12            ,MAXLOGHISTORY 1
 13            ,MAXLOGFILES 16' FROM dual
 14  )
 15  SELECT SUBSTR(str, 1, instr(str, ' ', 1, 1) -1) str
 16  FROM DATA
 17  WHERE instr(str, 'ORA-') > 0;

STR
----------------------------------------------------------------
ORA-1501
ORA-1999

SQL>

WHERE instr(str, 'ORA-') > 0我会过滤掉那些没有ORA-错误编号的行。

更新 WITH 子句只是为演示构建示例数据。在实际查询中,您不需要WITH子句。

您可以简单地使用查询:

SELECT SUBSTR(message_text, 1, instr(message_text, ' ', 1, 1) -1) message_text
  FROM x$dbgalert
 WHERE instr(message_text, 'ORA-') > 0;