定宽查询结果

问题描述 投票:0回答:1

我正在使用 PowerShell 运行自动创建 UTF8 文本文件的查询。其中一个要求是查询结果是固定宽度的,并且结果从第一个字符开始。我有某些包含满足固定宽度要求的货币的货币字段,但结果不是从第一个字符开始。我想弄清楚如何使用 PS 来 a) 确保结果是固定宽度和 b) 从列的第一个字符开始。

cast(coalesce(SLCDPM.FBAL, '') as char(20)) as [BALANCE],

结果不是从字段的字符 1 开始,而是 20 个字符长

然而这

cast(coalesce(SLCDPM.FBAL, '') as varchar(20)) as [BALANCE]
OR
LTRIM(cast(coalesce(SLCDPM.FBAL, '') as varchar(20))) as [BALANCE]

结果从字符 1 开始,但固定宽度不正确。

powershell tsql fixed-width
1个回答
0
投票

考虑到你想使用 Powershell 以固定宽度格式提取数据,你最好在 Powershell 中进行格式化。

由于我们没有示例数据、示例查询或预期结果,因此您需要将此示例用于您自己的用途。您可以使用创建所需的格式并将其分配给变量,如David Brabantanswer 所示,然后将其放入文件中。

当你说“结果从第一个字符开始”假设你的意思是你希望数据是无头的,因此

-HideTableHeaders
开关。

本例以

sys.databases
为例,演示所有列的宽度固定:

$format = @{Expression={$_.name};width=128}, @{Expression={$_.database_id};width=5}, @{Expression={$_.compatibility_level};width=5}, @{Expression={$_.collation_name};width=60}, @{Expression={$_.recovery_model};width=15}
Invoke-Sqlcmd -ServerInstance 'sandbox' -TrustServerCertificate `
-Query "SELECT name, database_id, compatibility_level, collation_name, recovery_model FROM sys.databases"  |
Format-Table $format -HideTableHeaders > db.txt

这对我来说有以下结果:

master                                                                                                                               1   160 SQL_Latin1_General_CP1_CI_AS                                               3
tempdb                                                                                                                               2   160 SQL_Latin1_General_CP1_CI_AS                                               3
model                                                                                                                                3   160 SQL_Latin1_General_CP1_CI_AS                                               3
msdb                                                                                                                                 4   160 SQL_Latin1_General_CP1_CI_AS                                               3
Sandbox                                                                                                                              5   160 Latin1_General_CI_AS                                                       3
AdventureWorks2019                                                                                                                   6   160 SQL_Latin1_General_CP1_CI_AS                                               3
AdventureWorksDW2019                                                                                                                 7   160 SQL_Latin1_General_CP1_CI_AS                                               3
CaseSensitive                                                                                                                        8   160 SQL_Latin1_General_CP1_CS_AS                                               3
OldDB                                                                                                                                9   160 Latin1_General_CI_AS                                                       3
PermissionsPOC                                                                                                                      10   160 Latin1_General_CI_AS                                                       3
SecurityTest                                                                                                                        11   160 Latin1_General_CI_AS                                                       3
SecurityTest2                                                                                                                       12   160 Latin1_General_CI_AS                                                       3
SillyTest                                                                                                                           13   160 Latin1_General_CI_AS                                                       3
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.