【发布时间】:2017-02-14 00:30:37
【问题描述】:
我目前正在研究一个正则表达式,以在 Postgres 语法上转换 sql 语法。我正在使用 geany 来替换文本。目前,我尝试更改的语法是这样的:
INSERT IGNORE INTO item_question_ (question_fk_,item_fk_) VALUES(1002,162);
进入:
INSERT INTO item_question_ (question_fk_,item_fk_) VALUES (1002,151)
WHERE NOT EXISTS
(SELECT 1 FROM item_questionnaire_ WHERE question_fk_=1002 AND item_fk_ = 151)
我很接近,但绝对不够。我有这个正则表达式:
(INSERT IGNORE INTO (.*)_ (.*) VALUES(.*);) //Find information
INSERT INTO \2_ \3 VALUES \4 WHERE NOT EXISTS (SELECT 1 FROM \2_ WHERE )// Transform information
事实上我遗漏了最重要的部分:WHERE 子句。
如何获取值 question_fk_,item_fk_ 和 1002,151 来构建我的 where 子句?
附加说明:Postgres 版本低于 9.5。我不能使用ON CONFLICT IGNORE
【问题讨论】:
-
为什么在这里使用正则表达式?这不是此类转译任务的合适工具。
-
我需要进行大量翻译,而不是一行。正则表达式似乎是为我做这件事的更合适的方式。但是也许我错了
-
为什么不升级到 9.5 并使用
on conflict ignore? -
我无法控制 postgres 版本。我无法升级
标签: sql regex postgresql