Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何使用REGEXP_SUBSTR函数从字符串中提取子字符串?_Sql_Regex_Teradata - Fatal编程技术网

Sql 如何使用REGEXP_SUBSTR函数从字符串中提取子字符串?

Sql 如何使用REGEXP_SUBSTR函数从字符串中提取子字符串?,sql,regex,teradata,Sql,Regex,Teradata,我需要从错误日志中提取单词和单词序列 以下是日志示例: 2019.06.08 14:32:36 ERR 10298587 2019-06-07 PROJECT_NAME script.sql 4483 2646 HY000 [NCR] [Teradata DBMS] : No more spool space in aload50. 2019.06.08 14:32:36 ERR 10298587 2019-06-07 PROJECT_NAME script.

我需要从错误日志中提取单词和单词序列

以下是日志示例:

2019.06.08 14:32:36 ERR 10298587    2019-06-07  PROJECT_NAME    script.sql  4483    2646 HY000 [NCR] [Teradata DBMS] : No more spool space in aload50.
2019.06.08 14:32:36 ERR 10298587    2019-06-07  PROJECT_NAME    script.sql  4483    2646 HY000 [NCR] [Teradata DBMS] : No more spool space in aload50. (ef)
2019.06.08 14:32:36 ERR 10298587    2019-06-07  PROJECT_NAME    script.sql  4483    2646 HY000 [NCR] [Teradata DBMS] : No more spool space in dload50.
2019.06.08 14:32:36 ERR 10298587    2019-06-07  PROJECT_NAME    script.sql  4483    2646 HY000 [NCR] [Teradata DBMS] : No more spool space in dload50. (ef)
message=[NCR] [Teradata DBMS] : No more spool space in aload50. (ef)
message=[NCR] [Teradata DBMS] : No more spool space in dload50. (ef)
message=[NCR] [Teradata DBMS] : No more spool space in aload50. (ee)
message=[NCR] [Teradata DBMS] : No more spool space in dload50. (ee)
我需要提取子字符串:

错误日志:

[Teradata DBMS]:aload50中没有更多的假脱机空间

没有(例如)

和用户名: 例如:

阿洛德50

用户名可以是:

aload01至aload999

dload01至dload999

select 
REGEXP_SUBSTR('2019.06.08 14:32:36  ERR 10298587    2019-06-07  PROJECT_NAME    script.sql  4483    2646 HY000 [NCR] error_message[Teradata DBMS] : No more spool space in aload50.',' regexp_for_error_log') AS error_log,
REGEXP_SUBSTR('2019.06.08 14:32:36  ERR 10298587    2019-06-07  PROJECT_NAME    script.sql  4483    2646 HY000 [NCR] [Teradata DBMS] : No more spool space in aload50.',' regexp_for_user_name') AS user_name,
FROM DUAL;

我们可以尝试在此处使用
REGEXP\u REPLACE
来替换捕获组:

SELECT
    REGEXP_REPLACE(log, '.*(\[Teradata DBMS\] : .* [^.]+)\..*', '\1') AS error_log,
    REGEXP_REPLACE(log, '.*\[Teradata DBMS\] : .* ([^.]+)\..*', '\1') AS user_name
FROM yourTable;

我们可以在这里尝试使用
REGEXP\u REPLACE
和一个捕获组:

SELECT
    REGEXP_REPLACE(log, '.*(\[Teradata DBMS\] : .* [^.]+)\..*', '\1') AS error_log,
    REGEXP_REPLACE(log, '.*\[Teradata DBMS\] : .* ([^.]+)\..*', '\1') AS user_name
FROM yourTable;

您在这里期望的确切输出是什么?@jarlh databaseoracle@TimBiegeleisen错误日志:[Teradata DBMS]:aload50用户名中没有更多的假脱机空间:aload50@dnoeth我用。我在Oracle上的Teradata上有ETL处理错误的日志。您在这里期望的确切输出是什么?@jarlh databaseoracle@TimBiegeleisen错误日志:[Teradata DBMS]:aload50用户名中没有更多的假脱机空间:aload50@dnoeth我用。我在Oracle上的Teradata上有ETL处理错误的日志。你说得对。我做错了什么。非常感谢。:)@MartinusP不,我做错了,一开始我没有测试代码。很高兴帮助您:-)hi@Tim Biegeleisen您知道如何从字符串:“[Teradata DBMS]:aload50中不再有假脱机空间。”获取用户名aload50?通过修改
REGEXP\u REPLACE(log'.\[Teradata DBMS\]:.*([^.]+)\..*,'\1')作为用户名
`您是在要求对regex进行解释还是其他什么?我需要一个解决方案,其中用户名的源是上一个解决方案
REGEXP\u REPLACE(error\u log'.*(\[Teradata DBMS\]:.[^.+])中的error\u log列\..*','\1')作为用户名,即使用字符串[Teradata DBMS]:aload50中没有更多的假脱机空间。剪切用户名:ALOAD50你是对的。我做错了什么。非常感谢。:)@MartinusP不,我做错了,一开始我没有测试代码。很高兴帮助您:-)hi@Tim Biegeleisen您知道如何从字符串:“[Teradata DBMS]:aload50中不再有假脱机空间。”获取用户名aload50?通过修改
REGEXP\u REPLACE(log'.\[Teradata DBMS\]:.*([^.]+)\..*,'\1')作为用户名
`您是在要求对regex进行解释还是其他什么?我需要一个解决方案,其中用户名的源是上一个解决方案
REGEXP\u REPLACE(error\u log'.*(\[Teradata DBMS\]:.[^.+])中的error\u log列\..*','\1')作为用户名,即使用字符串[Teradata DBMS]:aload50中没有更多的假脱机空间。剪切用户名:aload50