You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过MySQL的ALTER与SELECT语句永久展示表中指定数据子集

问题背景

MySQL表testingintern包含TagName、DateTime、Value三个字段,现有样例数据如下:

TagName, DateTime, Value
'SG_QRA_SGTC_0013.PV_Top_Temp', '2022-07-05 11:27:43.7810000', '86.4'
'SG_QRA_SGTC_0013.PV_Bot_Temp', '2022-07-05 11:27:43.7030000', '25.1'
'SG_QRA_SGHAST_0065.PV_HUMIDITY', '2022-07-05 11:27:43.6890000', '85.11'
'SG_QRA_SGHAST_0066.PV_HUMIDITY', '2022-07-05 11:27:43.6890000', '38.48'

需求为永久修改该表,仅保留TagName含Top/Bot、且时间部分为11:27:43的两条数据,目标数据集如下:

TagName, DateTime, Value
'SG_QRA_SGTC_0013.PV_Top_Temp', '2022-07-05 11:27:43.7810000', '86.4'
'SG_QRA_SGTC_0013.PV_Bot_Temp', '2022-07-05 11:27:43.7030000', '25.1'
原语句失效原因

你之前写的SQL存在4个问题:

  • 语法错误:like '%Bot%缺少闭合单引号,语句无法正常执行
  • 逻辑优先级错误:SQL中AND运算优先级高于OR,不加括号的情况下原语句实际逻辑为「匹配所有TagName含Top的数据,或匹配同时满足TagName含Bot+时间符合要求的数据」,筛选范围错误
  • 时间匹配错误:DateTime字段存储值带微秒精度,直接用TIME(DateTime) = '11:27:43'做等值匹配无法命中带小数秒的记录
  • 操作类型错误:SELECT语句仅做查询展示,不会永久修改表内存储的数据
操作步骤

重要提醒:执行删除操作前必须先做查询验证,避免误删数据无法恢复

  1. 先执行查询语句,确认返回结果完全是你需要保留的数据:
SELECT * FROM testingintern 
WHERE 
  (TagName LIKE '%Top%' OR TagName LIKE '%Bot%')
  AND TIME(DateTime) BETWEEN '11:27:43' AND '11:27:43.999999';

这里用时间范围匹配可以兼容微秒精度的时间存储,不会漏掉符合小时分钟秒要求的带小数秒的记录。

  1. 确认查询结果无误后,执行删除语句永久清理不符合要求的数据:
DELETE FROM testingintern 
WHERE NOT (
  (TagName LIKE '%Top%' OR TagName LIKE '%Bot%')
  AND TIME(DateTime) BETWEEN '11:27:43' AND '11:27:43.999999'
);

执行完成后,表内就仅留存你需要的目标数据了。

如果不需要修改原表,仅需要查询返回目标子集,直接运行第一步的SELECT语句即可。

内容的提问来源于stack exchange,提问作者GQS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 10:15:30