数据库A,列名:aa为操作任务,列名bb为操作步骤, bb的第一条数据为: 理工站,拉开2019K11刀闸,检查2018装设GH78刀闸在拉开; 第二条数据为: 广泰是的购物车站点,断开KV母线1M开关,检查KV母线1M开关在分闸; 用PGsql查看同一个“操作任务”的“操作步骤”中, 当数据出现"断开XX开关"或"拉开XX刀闸"字眼时, 检查对应后面的"检查XX开关在分闸"或"XX刀闸在拉开"的字眼中的 XX和"断开XX开关"或"拉开XX刀闸"字眼中的XX名称是否一致。 例如:查询bb的第一条数据中,(“拉开”和“刀闸”之间的名称)与(“检查”和“刀闸在拉开”之间的名称)是否一致
时间: 2024-03-13 12:45:22 浏览: 50
数据库的操作
可以使用以下SQL语句来查询同一个“操作任务”的“操作步骤”中出现的对应字眼中 XX 名称是否一致:
```
SELECT aa, bb
FROM 数据库A
WHERE aa IN (
SELECT aa
FROM 数据库A
WHERE bb LIKE '%断开%开关%' OR bb LIKE '%拉开%刀闸%'
GROUP BY aa
HAVING COUNT(DISTINCT SUBSTRING(bb, CHARINDEX('XX', bb)+2, CHARINDEX('刀闸', bb)-CHARINDEX('XX', bb)-2)) = 1
)
AND (bb LIKE '%断开%开关%' OR bb LIKE '%拉开%刀闸%')
AND bb LIKE '%检查%'+ SUBSTRING(bb, CHARINDEX('XX', bb)+2, CHARINDEX('刀闸', bb)-CHARINDEX('XX', bb)-2) + '%在%'+ SUBSTRING(bb, CHARINDEX('在', bb)+1, LEN(bb)-CHARINDEX('在', bb)-1) + '%'
```
其中,`SUBSTRING(bb, CHARINDEX('XX', bb)+2, CHARINDEX('刀闸', bb)-CHARINDEX('XX', bb)-2)`用于提取出“断开/拉开”后面的XX名称,`SUBSTRING(bb, CHARINDEX('在', bb)+1, LEN(bb)-CHARINDEX('在', bb)-1)`用于提取出“检查”后面XX名称所在的位置,`LIKE`和`%`用于模糊匹配对应的字眼。
阅读全文