【问题标题】:How to hard code spaces at end of result?如何在结果末尾硬编码空格?
【发布时间】:2018-03-16 14:34:32
【问题描述】:

我需要在我称为 NPI (nvarchar(20)) 的列的末尾添加空格。 NPI 始终为 10 位,但报告要求前 10 位为 NPI,后跟 10 个空格(我假设存在文本文件格式问题)。我尝试了以下方法:

cast([NPI] as nvarchar(20)) + '          '
cast([NPI] as nvarchar(20)) + Space(10)

但是,结果集不会改变。它只显示 10 位 NPI,不包括空格。

【问题讨论】:

  • 您使用的是哪个 dbms?
  • 改成 CAST([NPI] AS nchar(20))
  • 我正在使用 MySQL。我试图更改为 nchar,但输出没有运气 - 没有变化。
  • 它似乎应该工作,它只是不会显示在结果集中。
  • 如果您使用的是 SSMS,则说明您没有使用 MySQL。

标签: sql sql-server tsql spaces hardcode


【解决方案1】:

听起来您实际上是在使用 SQL Server 而不是 MySQL。 VARCHAR() 用于可变长度字符串,它将修剪结束空格。改为转换为 char/nchar 以获得所需的输出。它在 SSMS 中看起来不像,因此请检查 datalength 以确认 nchar(20) = 20 bytes * 2 用于 unicode。

SELECT CAST([NPI] AS NCHAR(20)) AS formattedNPI, 
DATALENGTH(CAST([NPI] AS NCHAR(20))) AS confirmation
FROM your_table

【讨论】:

  • 只是一个回声,SSMS 可能正在格式化您的输出,因此 SSMS 结果窗格中的结果可能看起来没有空格。
  • 谢谢!!!对于其他任何人,这可能不会显示在结果集中,但如果您导出为文本或 csv,或复制并粘贴到查询中,空格将在那里。
  • 另外,@GregoryBrauninger 如果您正在使用 NPI 并需要验证 NPI 是否有效,请查看 Luhn 算法。
【解决方案2】:

这似乎有效。添加“*”以表明存在空格..

print cast([NPI] as nchar(20)) + '*'

这里有一些其他的添加填充的俗气的方法......

print substring([NPI] + '                    ',1,20) + '*'

print [NPI] + space(20 - len([NPI])) + '*'

【讨论】:

    【解决方案3】:

    在演员表内添加空格

    cast([NPI] + '         ' as nchar(20))
    

    你说得对@dfundako,我被我的编辑愚弄了。

    这可行,但我使用的是 MariaDb (MySql),所以它现在可能不相关。

    select concat([NPI] , '         ')
    

    【讨论】:

    • 这是不必要的。转换为 char/nchar 将用空格填充结尾。
    • 没有显示在结果集中,但我确信它们在那里,只是像第十二个提到的那样被排除在外。
    猜你喜欢
    • 2011-03-26
    • 1970-01-01
    • 1970-01-01
    • 2014-04-16
    • 1970-01-01
    • 2011-09-08
    • 2022-06-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多