在连接时是否有更简单的方法在整个字符串中添加字符?我正在考虑利用一个函数来完成这个任务,并且可以通过连接来实现它;然而,除了串联之外,还有其他的选择吗?
下面是我需要do...There的表A,它有8列,例如col1、col2、col3等等。
;WITH
TABLE_A
AS
(
SELECT 'ABC' AS Col1
, 'COM' AS Col2
, 'SMALL' AS Col3
, '1234' AS Col4
, 'ABC INC.' AS Col5
, '123456789' AS Col6
, 'ABC Of New England' AS Col7
, 'NC123456' AS Col8
)
SELECT *
FROM TABLE_A我需要将列中的值与每个列之间的>值连接起来。我可以按照……的方式来完成这件事。
CONCAT(Col1,'>',Col2,'>',Col3,'>',Col4,'^',Col5,'>',Col6,'>',Col7,'>',Col8)但是我需要它是动态的,因此,例如,如果Col1 - Col3有一个值,那么只能对那些连接( col1,'>',Col2,'>',‘>,Col3)进行连接,如果Col1- Col5有值,那么Col1-Col5有值(Col1,'>',Col2,'>',Col3,’>‘’,Col4,'^',Col5等等),连接应该只在有值的范围内进行.
另外,要添加另一个皱纹,而不是Col4和Col5之间的>,我需要一个胡萝卜^作为分隔符。
是否有一种不使用CONCAT的替代方法来做到这一点?也许是个循环?
发布于 2020-02-18 22:20:36
下面是一些有用的东西的例子,尽管它只有最低限度的验证来满足您的需求。
;WITH
TABLE_A
AS
(
SELECT 'ABC' AS Col1
, 'COM' AS Col2
, 'SMALL' AS Col3
, '1234' AS Col4
, 'ABC INC.' AS Col5
, '123456789' AS Col6
, 'ABC Of New England' AS Col7
, 'NC123456' AS Col8
)
SELECT ConcentenatedString = ISNULL(('>' + NULLIF(a.Col1,'')),'')
+ISNULL(('>' + NULLIF(a.Col2,'')),'')
+ISNULL(('>' + NULLIF(a.Col3,'')),'')
+ISNULL(('>' + NULLIF(a.Col4,'')),'')
+ISNULL(('^' + NULLIF(a.Col5,'')),'')
+ISNULL(('>' + NULLIF(a.Col6,'')),'')
+ISNULL(('>' + NULLIF(a.Col7,'')),'')
+ISNULL(('>' + NULLIF(a.Col8,'')),'')
FROM TABLE_A aNULLIF用于将空字符串转换为NULL,以便在连接到NULL时消除分隔符。然后将这些空值转换回空白,以防止字符串的其余部分被删除。
发布于 2020-02-18 22:02:58
将cross apply与嵌套replace结合使用。这将满足您的需求,当col4和col5不是null和任何主要的>角色时,它们之间必须有col5。
select case when left(txt,1)='>' then right(txt, len(txt)-1) else txt end as str
from your_table
cross apply
(select replace(replace(replace(concat(col1,'>'
,col2,'>'
,col3,'>'
,col4, case when col4 is not null and col5 is not null then '^' else '>' end
,col5,'>'
,col6,'>'
,col7,'>'
,col8),'>>>>','>'),'>>>','>'),'>>','>') as txt) t;https://stackoverflow.com/questions/60289991
复制相似问题