SQL-组合第二个字符串始终右对齐的两个字符串



我目前正试图在合并两列时通过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函数(此处为文档)将col249 - LEN(col1) - LEN(col2)空格前置到右对齐col2,然后添加col2本身。

在相反的情况下,当1是添加的单个空格字符的长度时,在col1和左截col2之后添加一个空格到49 - LEN(ISNULL(myTable.col1, '')) - 1的长度。

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

让我们以答案中提供的数据为例,增加一行以显示当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

我希望它至少有一点帮助。

最新更新