在字符串连接之间添加字符的函数

Function to add character between concatenation of strings

有没有更简单的方法在串联时在整个字符串中添加字符?我正在考虑利用一个函数来做到这一点,并且可以通过串联来实现;但是,除了串联之外,还有其他方法可以完成吗?

这是我需要做的...Table 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 有一个值,那么连接必须只发生在那些 CONCAT(Col1,'>',Col2,'>',Col3) 上,如果Col1 - Col5 有值,然后 CONCAT(Col1,'>',Col2,'>',Col3,'>',Col4,'^',Col5) 等等,连接应该只到有值为止。

还要添加另一个皱纹,而不是 Col4 和 Col5 之间的 >,我需要一个胡萝卜 ^ 作为分隔符。

有没有不使用 CONCAT 的替代方法?也许是循环?

cross apply 与嵌套 replace 结合使用。这将满足您在 col4col5 之间设置 ^ 的要求,当它们不是 null 以及任何前导 > 字符时。

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;

DEMO

这是一个可行的示例,尽管它只需要最少的验证就可以满足您的要求。

;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 a

NULLIF 用于将空字符串转换为 NULL,以便在连接到 NULL 时消除分隔符。然后将这些 NULL 转换回空白,以防止字符串的其余部分被删除。