在字符串串联之间添加字符的功能

时间:2020-02-18 21:55:50

标签: sql sql-server tsql sql-server-2014 string-concatenation

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

这是我需要做的...表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的替代方法?也许是循环?

2 个答案:

答案 0 :(得分:1)

这是一个可行的示例,尽管只有很少的验证可以满足您的要求。

;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转换回空白,以防止删除字符串的其余部分。

答案 1 :(得分:0)

cross apply与嵌套的replace一起使用。当^col4既不是col5也不是任何前导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; $row = mysqli_fetch_assoc($result); 之间。

if(($result->num_rows > 0))
{
    while($row = mysqli_fetch_array($result))

DEMO