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 并左切 col2
到 49 - LEN(ISNULL(myTable.col1, '')) - 1
的长度,而 1
是 1
的长度添加了单个 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
我希望至少能有所帮助。
我目前正在尝试在合并两列时通过 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 并左切 col2
到 49 - LEN(ISNULL(myTable.col1, '')) - 1
的长度,而 1
是 1
的长度添加了单个 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
我希望至少能有所帮助。