SQL - 合并两个字符串,第二个字符串始终右对齐

SQL - Combine two strings having the second string always right aligned

我目前正在尝试在合并两列时通过 SQL 查询实现对齐。

我当前的数据集类似于:

Col1    Col2
usd     US Dollar 
cad     Canadian Dollar 
mxn     Mexican Peso

而且我想合并col1 + col2,但是无论col2中有多少个字符,从col1出来的数据都需要在显示中始终右对齐。

显示限制为 49 个字符。 Col2 没有具体限制,因为它是一个描述列,而 col1 是一个百分比列,因此它最多有 7 个字符:100.00%

如有任何帮助,我们将不胜感激。

谢谢

如果我很好地理解您的问题并假设 col1 的最大长度为 7 个字符,而 col2 长度未定,则以下查询应该会为您提供所需的结果:

SELECT 
   ISNULL(myTable.col1, '') 
   + (CASE WHEN LEN(ISNULL(myTable.col2, '')) < 49 - LEN(ISNULL(myTable.col1, ''))
           THEN SPACE(49 - LEN(ISNULL(myTable.col1, '')) - LEN(ISNULL(myTable.col2, ''))) 
                + ISNULL(myTable.col2, '')
           ELSE ' ' + LEFT(ISNULL(myTable.col2, ''), 
                           49 - LEN(ISNULL(myTable.col1, '')) - 1)
      END) AS cols_for_49chars_display
FROM
    myTable

由于假定 col1 的最大长度为 7 个字符,因此 CASE 语句验证特定行的 col2 的长度。

如果它低于 49 - LEN(col1),使用 TSQL SPACE 函数 (docs here) 在 col2 前加上 49 - LEN(col1) - LEN(col2) spaces 右对齐 col2然后自己加上col2.

在相反的情况下,在 col1 之后添加一个 space 并左切 col249 - LEN(ISNULL(myTable.col1, '')) - 1 的长度,而 11 的长度添加了单个 space 字符。

示例输入数据和查询结果:

让我们以您的答案中提供的数据为例,添加一个额外的行来显示当 col2 值太长时会发生什么:

myTable内容:

col1    col2
------------------------------------------------------------------------------------------------
usd     US Dollar
cad     PCanadian Dollar
mxn     Mexican Peso
dummy   Very long description of a "dummy" currency that in fact doesn't exist in the real world

以上行的查询结果为:

           cols_for_49chars_display
-------------------------------------------------
usd                                     US Dollar
cad                              PCanadian Dollar
mxn                                  Mexican Peso
dummy Very long description of a "dummy" currency

我希望至少能有所帮助。