如何从Raw_Data表提取指定关键词至Pivot表Cause列?
如何从SQL文本列提取指定关键词并更新到另一张表
刚接触SQL的话,咱们先理清楚核心需求:你要从Raw_Data表的E_MSG文本里找出指定的关键词("Internet Outage"、"Server Crash"、"Unknown Error"),然后把这些关键词填充到Pivot表对应的Cause列里。注意到你给的Pivot表已经有4条记录了,只是Cause是NULL,所以这里应该用UPDATE语句(不是INSERT,INSERT是用来新增行的哦)来实现。
下面给你两种实用的实现方式,适配不同的数据库场景:
方式一:兼容大多数数据库的CASE WHEN + LIKE写法
这种写法在SQL Server、MySQL、Oracle等主流数据库都能用,不用考虑正则支持的问题:
UPDATE Pivot SET Cause = ( SELECT CASE -- 依次匹配指定关键词,注意顺序(如果一条文本里有多个关键词,只会匹配第一个) WHEN E_MSG LIKE '%Internet Outage%' THEN 'Internet Outage' WHEN E_MSG LIKE '%Server Crash%' THEN 'Server Crash' -- 匹配大小写不同的"Unknown Error"/"Unknown error" WHEN E_MSG LIKE '%Unknown Error%' OR E_MSG LIKE '%Unknown error%' THEN 'Unknown Error' ELSE NULL -- 没有匹配到关键词的话,保持原来的NULL值 END FROM Raw_Data -- 通过BOT_ID和P_ID关联两张表的对应记录 WHERE Raw_Data.BOT_ID = Pivot.P_ID );
方式二:用正则简化写法(适用于支持正则的数据库,比如MySQL、PostgreSQL)
如果你的数据库支持正则表达式,代码会更简洁,还能直接处理大小写问题:
以MySQL为例:
UPDATE Pivot -- 直接关联两张表,比子查询更直观 JOIN Raw_Data ON Raw_Data.BOT_ID = Pivot.P_ID -- 用正则提取第一个匹配到的关键词,'i'表示不区分大小写 SET Cause = REGEXP_SUBSTR(Raw_Data.E_MSG, 'Internet Outage|Server Crash|Unknown Error', 1, 1, 'i');
额外说明:如果确实需要插入新行到Pivot表
如果你不是要更新已有记录,而是要把匹配到关键词的记录作为新行插入到Pivot,可以用INSERT INTO ... SELECT的写法:
INSERT INTO Pivot (Process, Cause) SELECT -- 这里的Process字段你可以根据实际需求设置,比如固定值或者关联其他字段,示例暂时用NULL NULL, CASE WHEN E_MSG LIKE '%Internet Outage%' THEN 'Internet Outage' WHEN E_MSG LIKE '%Server Crash%' THEN 'Server Crash' WHEN E_MSG LIKE '%Unknown Error%' OR E_MSG LIKE '%Unknown error%' THEN 'Unknown Error' ELSE NULL END FROM Raw_Data -- 可选:过滤掉没有匹配到关键词的记录,避免插入NULL的Cause WHERE E_MSG LIKE '%Internet Outage%' OR E_MSG LIKE '%Server Crash%' OR E_MSG LIKE '%Unknown Error%' OR E_MSG LIKE '%Unknown error%';
用你提供的测试数据执行UPDATE后,Pivot表的Cause列会变成:
- P_ID 1: Internet Outage
- P_ID 2: Server Crash
- P_ID 3: Internet Outage
- P_ID 4: Unknown Error
内容的提问来源于stack exchange,提问作者Wayne_Chen
相关产品推荐
相关产品推荐

