由于多个遗留系统,我正在处理的一个项目有一个由 10 列组成的表。
在这 10 列中,两条数据将始终出现在最后五列中的两列中,前面有一个标识字符串。
最后 5 列是pair0
, pair1
, pair2
, pair3
, 和pair4
我在这五列中的两列中查找的数据格式是tx-speed=3D...
和rx-speed=3D...
。在这些字符串中的每一个之后是一系列任意长度的数字。
我无法修改将数据插入此表的程序,我只能在之后修改它。
在每一行,现有的和未来的,我想确保后面的数字系列tx-speed=3D
在pair1
列中,并且后面的数字系列rx-speed=3D
在pair2
列中。这两列的内容并不重要,只要tx-speed
和rx-speed
值不相互覆盖即可。
作为项目的不幸约束,这不能在数据库触发器上完成,它必须作为 cron 作业或类似作业的一部分。
我的大问题是我不是 SQL 管理员。我可以用许多可用语言之一编写脚本,但效率将是关键,从 SQL 中提取数据以检查它并从不同平台重新插入它的效率将非常低。
我开始尝试编写一个 SQL 脚本来执行此操作,但我对 SQL 的工作原理还不够了解,甚至无法使其正常工作。
为了(希望)澄清一点,我整理了以下伪代码,希望有人能够从中进行 SQL 查询,我可以将其用于我的目的。
for each row:
@tx = ""
@rx = ""
txstr = "tx-speed=3D"
rxstr = "rx-speed=3D"
if (pair0 LIKE txstr+"%")
@tx = SUBSTRING(pair0, FROM txstr.count-1)
elsif (pair1 LIKE txstr+"%")
@tx = SUBSTRING(pair0, FROM txstr.count-1)
elsif (pair2 LIKE txstr+"%")
...
endif
if (pair0 LIKE rxstr+"%")
@rx = SUBSTRING(pair0, FROM rxstr.count-1)
elsif (pair1 LIKE rxstr+"%")
...
endif
pair1 = @tx
pair2 = @rx