【发布时间】:2016-07-12 08:34:49
【问题描述】:
我的表结构如下:
col1 col2 col3 col4
-------------------------------
aK Mbcd ABc defgh
col2、col3 和 col4 列的类型为 varchar(100),col1 的类型为 varchar(500)。
我需要一个选择查询来获得如下输出
col1 col2 col3 col4
-------------------------------
aK,Mb cd,A Bc,d efgh
逻辑解释如下:
结果,Col2、col3 和 col4 最多可以有 4 个字符,但 col1 可以有超过 4 个字符,最多 100 个。
如果任何一列有更多字符,最后 4 个字符将保留在同一列中,其他额外的列将与前一列的值连接,用逗号 , 分隔,并且相同的规则将也适用于连接的值。
我编写了以下 T-SQL 语句。它适用于最后两列。但是我想在从 col4 中添加一些字符后,使用 col3 的新计算值去除多余的字符
SELECT
CASE
WHEN X.Col4Length > 4
THEN concat(X.col3, ',', substring(x.col4, 0, X.Col4Length - 3))
ELSE X.col3
END AS col3,
CASE
WHEN X.Col4Length > 4
THEN substring(x.col4, X.Col4Length - 3, x.Col4Length)
ELSE X.col4
END AS col4
FROM
(SELECT
Col1, Col2, Col3, Col4,
Len(Col1) AS Col1Length,
Len(Col2) AS Col2Length,
Len(Col3) AS Col3Length,
Len(Col4) AS Col4Length
FROM
mytable) X
【问题讨论】:
-
您似乎在这里误用了 SQL - 感觉更像是一个演示问题,而不是数据问题,因此在应用程序/报告工具中可能比在 SQL 中更好地处理。此外,明显的边缘情况 - 如果文本总量超过您所说的容量怎么办?例如。输入大小为
(100,100,100,100),输出大小为(100,4,4,4)。 -
好的,感谢您指出另一个问题。我将 col1 的大小设置为
500
标签: sql sql-server select