Notepad++ - 将 SQL 服务器的大查询变成一行

Notepad++ - Turn big query from SQL Server into one line

我在 notepad++ 中从 SQL 服务器发出了一个大查询(1012 行),我只想将此查询传递给一行。例如,我有这个:

SELECT *
FROM tableA
WHERE Field_A = 1

我想传递给这个:

SELECT * FROM tableA WHERE Field_A = 1

我正在尝试使用以下代码:

  1. 打开“替换”对话框 ( Ctrl + H )
  2. 选中环绕选项
  3. 选择正则表达式搜索模式
  4. 在查找内容中填写正则表达式(\h*\R)+:区域
  5. 在替换为:区域中填写正则表达式\x20
  6. 单击“全部替换”按钮

但它为我创建了更多新行,代码之间有一个很大的 space。

我该怎么做?

您应该能够用单个 space 替换行结尾的 \r\n。请注意,我将 \r 设为可选,以防您可能在 Linux 上,其中行结尾只是 \n.

查找:

\r?\n

替换:

[single space]

这将确保在上一行的结尾和当前行的开头之间至少有一个 space。额外的白色space 不应导致 SQL 查询被错误解析。

1. Open the Replace dialog ( Ctrl + H )
2. Check the Wrap around option
3. Choose the Extended search mode
4. Fill in the regex \r\n in the Find what: zone
5. Put one white space in the Replace with: zone
6. Click on the Replace All button

根据您的换行约定,第 4 步可能是:

4bis. Fill in the regex \n in the Find what: zone

您可以使用以下方式显示换行符: View -> Show symbols -> Show end of lines。 如果显示 CRLF,执行第 4 步将回答您的问题。如果您看到 LF,您将需要执行第 4 步之二。

根据 Tim Biegeleisen 的建议,您还可以使用正则表达式搜索模式(步骤 3)并填写正则表达式 \r?\n。这两者同时完成。

您必须删除换行符后的空格,使用此正则表达式 (?:\h*\R\h*)+

  • Ctrl+H
  • 查找内容:(?:\h*\R\h*)+
  • 替换为:A SINGLE SPACE
  • 选中环绕
  • 检查正则表达式
  • 全部替换

解释:

(?:         : start non capture group
    \h*     : 0 or more horizontal spaces
    \R      : any kind of linebreak (ie. \r, \n, \r\n)
    \h*     : 0 or more horizontal spaces
)+          : end group, repeated 1 or more times

替换:

A single space

举个例子:

SELECT *

            FROM tableA



WHERE Field_A = 1

给定示例的结果:

SELECT * FROM tableA WHERE Field_A = 1