如何从CONCAT语句中删除空字段?

时间:2017-01-30 23:07:11

标签: sql-server tsql concat

我使用CONCAT()函数连接几个字符串字段。这是代码:

CONCAT(a.[OrganizationalUnit], ' - ', a.[Level1], ' - ', a.[Level2], ' - ', a.[Level3], ' - ', a.[Level4], ' - ', a.[Level5], ' - ', a.[Level6], ' - ', a.[Level7], ' - ', a.[Level8], ' - ', a.[Level9], ' - ', a.[Level10], ' - ', a.[Level11], ' - ', a.[Level12], ' - ', a.[Level13], ' - ', a.[Level14]) AS Organization

有些字段为null。发生这种情况时,我会在输出中收到一系列破折号。当田地空白时,有没有办法摆脱那些?以下是输出示例:

公司123 - 国家 - LC BR - BR - RCL - 5510-RC BR(V) - EM - DG - - - - - - -

3 个答案:

答案 0 :(得分:0)

使用if语句环绕你的字段:

    $mysqli = new mysqli($db_host, $db_user, $db_password, $db_name);
    $results = $mysqli->query("Select UserID, LastName, FirstName, UserName, Phone from User where UserID=".$searchValue." ") or mysqli0;
  if(!$results){
    echo '<script>alert("not working"); </script>';
  }"

答案 1 :(得分:0)

您还没有指定SQL Server版本,因此我假设SQL Server 2012或更高版本并使用SQL 2012或更新版本中提供的iif(即时)。查看有关MSDN

的更多信息

下面的解决方案使用变量,只是为了显示一些可执行代码作为示例。您可以使用列名替换变量。

declare 
    @column1 varchar(10) = 'c1',
    @column2 varchar(10) =  null,
    @column3 varchar(10) = 'c3',
    @column4 varchar(10) = 'c4',
    @column5 varchar(10) = null,
    @column6 varchar(10) = null,
    @columnN varchar(10) = null -- 'cN'

declare @concatenated varchar(100) 

select @concatenated =  
    rtrim
    (
        concat 
        (
            iif(@column1  is not null, concat(@column1, ' - '), ''),
            iif(@column2  is not null, concat(@column2, ' - '), ''),
            iif(@column3  is not null, concat(@column3, ' - '), ''),
            iif(@column4  is not null, concat(@column4, ' - '), ''),
            iif(@column5  is not null, concat(@column5, ' - '), ''),
            iif(@column6  is not null, concat(@column6, ' - '), ''),
            @columnN
        )
    )

select rtrim(left(@concatenated, len(@concatenated) - patindex('%[^-]%', reverse(@concatenated))+1)) as 'Result'

这会将结果返回为c1 - c3 - c4

第一个select将值连接在一起。

第二个select删除由结尾的空字段引起的任何尾随空格和短划线。

逻辑可以处理所有值为null,中间值为null,最后一个值为null,最后任何值为null的场景。

答案 2 :(得分:0)

' - '+a.Leveln嵌套在每个连续部分中。

Declare @YourTable table ([OrganizationalUnit] varchar(10),Level1 varchar(10),Level2 varchar(10),Level3 varchar(10),Level4 varchar(10),Level5 varchar(10),Level6 varchar(10),Level7 varchar(10),Level8 varchar(10),Level9 varchar(10),Level10 varchar(10),Level11 varchar(10),Level12 varchar(10),Level13 varchar(10),Level14 varchar(10),Level15 varchar(10))
Insert Into @YourTable (OrganizationalUnit,Level1,Level2) values ('Org Unit','LevelOne','LevelTwo')

Select CONCAT(a.[OrganizationalUnit], ' - '+a.[Level1], ' - '+ a.[Level2], ' - '+ a.[Level3], ' - '+ a.[Level4], ' - '+ a.[Level5], ' - '+ a.[Level6], ' - '+ a.[Level7], ' - '+ a.[Level8], ' - '+ a.[Level9], ' - '+ a.[Level10], ' - '+ a.[Level11], ' - '+ a.[Level12], ' - '+ a.[Level13], ' - '+ a.[Level14]) 
From @YourTable A

返回

Org Unit - LevelOne - LevelTwo