【问题标题】:How to format variable length values in a given column to same length output如何将给定列中的可变长度值格式化为相同长度的输出
【发布时间】:2019-03-25 23:16:45
【问题描述】:

从需求文档中,我需要将数据从 SQL Server 提取到文本文件中,格式类似于 ,其中第一列需要填充位置 1-9、下一个 10-27、下一个 28 -43 等等,不管列中数据的实际长度。

鉴于每行/列组合将具有不同的数据长度,不知道如何处理。任何想法,将不胜感激。

我尝试过右空格、左空格等,但它们都只是在实际数据长度上添加空格,而不是将返回数据的长度填充为 x 长度。

SELECT 
CAST(LEFT(FIRSTNAME + SPACE(60), 60) AS CHAR(60)) 'LEFT'
FROM MLA

有点像

Robert      Gaskin          Portland

【问题讨论】:

  • 您对该问题的查询应该有效LEFT(FIRSTNAME + SPACE(60), 60)。这将使列文本的长度为 60 个字符,无论其原始长度如何。
  • SELECT Len(LEFT(PHONENUMBER + SPACE(60), 60)) 'LEFT' FROM MLA 结果长度为 10 个字符。除非我错过了什么……
  • LEN SQL Server 中的函数返回忽略尾随空格的文本长度。这就是为什么您看不到 LEN 返回 60 的原因。但是,空格在那里。您可以使用DATA_LENGTH 来验证最终结果。或者只是运行查询并查看结果。
  • 是的,在评论后发现,我的错,我道歉。
  • 现在您可以自己回答问题了。

标签: hl7 sql-server tsql spaces


【解决方案1】:
select RPAD( firstname, 10, ' ' ) as padded_name from MLA

【讨论】:

  • 这是 oracle 语法。但是这个问题(至少现在)是用 sql-server 标记的
  • 是的 - 我明白了......我将把它留给 Oracle 用户 - 希望不会对这个改变投反对票......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-17
  • 1970-01-01
  • 2017-12-20
  • 2016-08-26
  • 2020-01-11
相关资源
最近更新 更多