如何格式化 SQL 插入以对齐逗号分隔符?

How to format SQL inserts to align the comma separators?

我有一个 post 部署脚本 inserts/merges 初始数据到表。我想格式化插入脚本,以便要插入的每一行都具有相同的长度。我希望能够按住 Alt 键单击并 select 每条记录的相同列。

insert 语句中的值的格式为:

(123, 'File_X', 'ShortString'), 
(124, 'File_XYZ', 'LoooonnnngString'), 

我想要实现的是这种格式:

(123, 'File_X'  , 'ShortString'     ),
(124, 'File_XYZ', 'LoooonnnngString'), 

我找不到任何可以配置为实现该目的的格式化程序。

更新

原来在 Notepad++ 中有一个 更简单的方法:

  1. 如果您还没有安装 TextFX plugin(通过转到插件 -> 插件管理...并搜索和 selecting TextFX,然后在出现提示时重新启动)。
  2. CTRL+A 到 select 所有文本
  3. 转到 TextFX -> TextFX 编辑 -> 通过 (,) 排列多行
  4. 任务完成!

后代的旧答案...

我不知道自动执行此操作的方法,但可以在 Notepad++ 中相当简单地完成,如下所示:

  1. CTRL+H打开替换window.
  2. Select“搜索模式”下的“正则表达式”单选按钮。
  3. 在“查找内容”中输入 \h+ 并在“替换为”中输入 \t (即用单个制表符替换每个空白块).
  4. 点击“全部替换”。
  5. 现在通过“设置”->“首选项”->“语言”调整选项卡设置,并调整“选项卡大小”数字,直到所有项目都对齐(选择尽可能小的数字 - 对于您的示例,我使用了 6)。
  6. 现在转到编辑 -> 空白操作 -> TAB 到 Space (将制表符转换回空格)
  7. 您现在应该非常接近您所要求的内容,但在某些地方可能会有比需要更多的空格。如果你关心这个,需要额外的手册......在第一行,转到你想从中删除空格的位置并按住 ALT+SHIFT 然后按住向下箭头键直到您到达最后一行。然后您将处于“块模式”并且可以使用退格键删除所有行中的空格。完成后,按任意光标键退出块模式并根据需要重复。

我试过一个愚蠢的方法来解决你的问题。首先,我假设所有行都有三列。将脚本插入 table 并使用下面的查询将它们全部格式化为您想要的格式。 (我创建了一个 table 命名脚本并将脚本插入到脚本列中)

with cte as (
select *,charindex (',',script) FirstSplit,
charindex (',',script,charindex (',',script)+1) SecondSplit,
charindex ('),',script,charindex (',',script,charindex (',',script)+1)+1) ThirdSplit
from scripts
),
cte2 as (select * ,max(firstsplit)over(order by (select null)) MaxFirstSplit,max(SecondSplit)over(order by (select null)) MaxSecondSplit ,max(ThirdSplit)over(order by (select null))MaxThirdSplit  from cte) 

select (substring(script,1,firstsplit-1)+space(maxfirstsplit-firstsplit)+',') +
(substring(script,FirstSplit+1,SecondSplit-FirstSplit-1)+space(MaxSecondSplit-SecondSplit-(MaxFirstSplit-FirstSplit))+',' )+
(substring(script,SecondSplit+1,ThirdSplit-SecondSplit-1)+space(MaxThirdSplit-ThirdSplit-(MaxSecondSplit-SecondSplit))+'),') NewScript
from cte2

输入:

 script
    (123, 'File_X', 'ShortString'),
    (124, 'File_XYZ', 'LoooonnnngString'),
    (124, 'File_XYZ', 'LgString'),
    (124, 'F_XYZ', 'Lgring'),
    (1, 'F_XYZ', 'Lgring'),

输出:

NewScript
(123, 'File_X'  , 'ShortString'     ),
(124, 'File_XYZ', 'LoooonnnngString'),
(124, 'File_XYZ', 'LgString'        ),
(124, 'F_XYZ'   , 'Lgring'          ),
(1  , 'F_XYZ'   , 'Lgring'          ),

我把它写成评论,但正如@zimek-atomek 所建议的那样,我会将其作为更清晰的答案。

要对齐文件中的所有列,您可以使用 Visual Studio Code called Rainbow CSV (https://marketplace.visualstudio.com/items?itemName=mechatroner.rainbow-csv)

中的插件

由于您要对齐的文件包含逗号(但它也支持其他分隔符),您可以使用页面开头列表中提到的align columns功能。