如何在oracle查询的输出中获取特定的单词
How to get specific words in an output of oracle query
如果我发送这样的查询
select message_text
from x$dbgalert;
然后我得到下面这个结果..
ORA-1501 signalled during: CREATE DATABASE "NEWDB"
,MAXINSTANCES 1
,MAXLOGHISTORY 1
,MAXLOGFILES 16
但我想在上面的结果中得到一个表示“ORA-1501
”的特定单词。
我要的是一个或几个我想看的特殊词
在包含很多单词的长句中。
您可以使用 SUBSTR 和 INSTR。
例如,假设您的 table 中有 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-
错误号的行。
Update WITH 子句只是为演示构建示例数据。在您的实际查询中,您不需要 WITH 子句。
您可以简单地使用查询:
SELECT SUBSTR(message_text, 1, instr(message_text, ' ', 1, 1) -1) message_text
FROM x$dbgalert
WHERE instr(message_text, 'ORA-') > 0;
如果我发送这样的查询
select message_text
from x$dbgalert;
然后我得到下面这个结果..
ORA-1501 signalled during: CREATE DATABASE "NEWDB"
,MAXINSTANCES 1
,MAXLOGHISTORY 1
,MAXLOGFILES 16
但我想在上面的结果中得到一个表示“ORA-1501
”的特定单词。
我要的是一个或几个我想看的特殊词 在包含很多单词的长句中。
您可以使用 SUBSTR 和 INSTR。
例如,假设您的 table 中有 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-
错误号的行。
Update WITH 子句只是为演示构建示例数据。在您的实际查询中,您不需要 WITH 子句。
您可以简单地使用查询:
SELECT SUBSTR(message_text, 1, instr(message_text, ' ', 1, 1) -1) message_text
FROM x$dbgalert
WHERE instr(message_text, 'ORA-') > 0;