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)
替换为:(空字符串,或您需要的任何值)
详情
\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次。
)
- 关闭第一个捕获组。
[^,]+,
- 除了逗号外,至少匹配一次后跟逗号的任何内容。
大家好我遇到了以下问题:
我有一长串 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)
替换为:(空字符串,或您需要的任何值)
详情
\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次。
)
- 关闭第一个捕获组。
[^,]+,
- 除了逗号外,至少匹配一次后跟逗号的任何内容。