SQL 查询的正则表达式

Regex for SQL Query

大家好我遇到了以下问题:
我有一长串 SQL 查询,我想根据我的其中一项更改进行调整。最后,我有一个重命名问题,恐怕我想解决它比预期的更复杂。 查询如下所示:

INSERT member (member, prename, name, street, postalcode, town, tel1, tel2, fax, bem, anrede, salutation, email, name2, name3, association, project) VALUES (2005, N'John', N'Doe', N'Street 4711', N'1234', N'Town', N'1234-5678', N'1234-5678', N'1234-5678', N'Leader', NULL, N'Dear Mr. Doe', N'a@b.com', N'This is the text i want to delete', N'Name2', N'Name3', NULL, NULL);

在“插入”中,我删除了另一列(我只是通过 Notepad++ 通过键入搜索词 - “example,” - 并将其替换为空字段。只有以下值中的条目 I使用此方法无法退出,因为此处的文本有所不同。到目前为止,我只使用了调整查询列表的文本文件。

正如您所看到的,值中的条目比插入中多了一个条目(这里还有另一列,但它被我的更改删除了)。
它是电子邮件地址后的条目。我想删除它,包括逗号(N'这是我要删除的文本',)。

我的想法是组个群,说把逗号后面的第14位去掉。然而,即使经过研究我也不知道如何实现这一点。

我认为它可能看起来像这样(在 https://regex101.com/ 中尝试过)

VALUES\s?\((,) something here

这是正确的方法还是有其他方法?我只知道 Regex 来解决这个问题,因为这里的值当然看起来不同。 以及我最终如何使用正则表达式来调整查询(因为查询是我计算机的本地查询,尚未包含在代码中)。


简短摘要:

更改查询
VALUES (... test5, test6, test7 ...)

VALUES (... test5, test7 ...)

您可以使用以下方法删除/替换您需要的值:

查找内容\bVALUES\s*\((\s*(?:N'[^']*'|\w+))(?:,(?1)){12}\K,(?1)
替换为:(空字符串,或您需要的任何值)

regex demo

详情

  • \bVALUES - 整个单词 VALUES
  • \s* - 0+ 个空格
  • \( - 一个(
  • (\s*(?:N'[^']*'|\w+)) - 第 1 组:0+ 个空格,然后 N' 后跟除 ' 之外的任何 0 个或更多字符,然后是 ',或者 1 + 单词字符数
  • (?:,(?1)){12} - , 十二次重复,然后是第 1 组模式
  • \K - 匹配重置运算符,丢弃匹配内存缓冲区中到目前为止匹配的文本
  • , - 逗号
  • (?1) - 第 1 组模式。

设置屏幕:

根据我的评论,您可以使用 find/replace,您可以在其中搜索:

(\bVALUES +\((?:[^,]+,){13})[^,]+,

并替换为</code></p> <p>在线查看<a href="https://regex101.com/r/QaFWIu/4" rel="nofollow noreferrer">demo</a></p> <ul> <li><code>( - 打开第一个捕获组。

  • \bValues +\( - 匹配单词边界,字面意思是 'VALUES',后跟至少一个 space 和字面意思的开括号。
  • (?: - 打开非捕获组。
    • [^,]+, - 除了逗号外,至少匹配一次后跟逗号的任何内容。
    • ){13} - 关闭非捕获组并重复13次。
  • ) - 关闭第一个捕获组。
  • [^,]+, - 除了逗号外,至少匹配一次后跟逗号的任何内容。