SQL Server将char(1)显示为4个字符,由空格填充



我一直在构建一个简单的查询,以返回固定宽度记录以导出到较旧的应用程序。我用过

Select Cast([myColumn1] as char(1)), Cast([myColumn2] as char(1)) from myTable

对于单个字符列,但是SQL Server Management Studio中显示的结果始终将其粘贴到4个字符中。例如,对于几个单字符列,它显示:

---- ----
P    A

我希望看到:

- -
P A

我有几个问题:

  1. 如果我在代码中使用查询,还是会按单个字符宽度进行预期的格式,是否会发生这种情况?我想知道它是否是SSM中输出窗格的功能(尽管输出到文件时表现出相同的行为)。

  2. 如果确实发生了,是否有解决方法?

我希望这不是一个愚蠢的问题,但似乎找不到任何文档...

下划线与实际数据无关。4是最小数字SSM会显示。

尝试一下并验证:

DECLARE @varA VARCHAR(4) = 'A'
,@varB VARCHAR(4) = 'B'
SELECT '|'+CAST(@varA AS CHAR(1))+'|'+@varB

对于Microsoft SQL Server Management Studio,您可以在-Tools->"选项"中更改输出格式 ->查询结果 -> SQL Server-> sql Server->结果。

选项菜单

如果您使用的列对输出格式对齐,则将显示为---,并根据数据类型增加,但是它不必匹配数据类型的实际长度,例如大小1的数据将以4 ----。

显示

您可以通过以下内容进行测试:

select 'a',  CAST(1 AS INT), CAST(1 AS BIGINT)

要验证数据实际长度,您可以在此处使用DataLength -document。

我只是想总结我实际上要找到的是什么。请参阅下面的复制评论。

SSMS结果窗格的已知功能,任何列的返回少于4个字符。这不是记录的,而是一致且可验证的功能。这意味着结果窗格不适合依靠特定格式或返回列的宽度的测试查询。

Is this documented anywhere that you know of, or is it just known through 
trial-and-error? – underscore_d 17 hours ago
Viewing query results in SSMS is a bit inconsistent. I wouldn't use SSMS 
results window for anything mission critical. – digital.aaron 17 hours ago
@underscore_d, not anywhere that I know of. It was, however, brought up in a 
side conversation in a Kimberley Tripp SQL Server training course I attended 
many years ago. – digital.aaron 17 hours ago

最新更新