Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 带“-”的sql server查询concat字符串_Sql Server_String_Sql Server 2000_Coalesce - Fatal编程技术网

Sql server 带“-”的sql server查询concat字符串

Sql server 带“-”的sql server查询concat字符串,sql-server,string,sql-server-2000,coalesce,Sql Server,String,Sql Server 2000,Coalesce,在SQL查询中,我试图在select子句中连接两个字符串。以下是预期结果: col A col B Result null null & null '' & null XYZ XYC '' null & '' '' & '' XYZ XYC ABC null ABC ABC '' ABC ABC XYZ ABC-X

在SQL查询中,我试图在select子句中连接两个字符串。以下是预期结果:

col A   col B   Result
null    null    &
null    ''      &
null    XYZ     XYC
''      null    &
''      ''      &
''      XYZ     XYC
ABC     null    ABC
ABC     ''      ABC
ABC     XYZ     ABC-XYC
我的挑战是——如何让“冲刺”在最后一个场景中出现,而不是在其他场景中出现

以下是我的尝试:

DECLARE @ColA as varchar(10)
DECLARE @ColB as varchar(10)

set @ColA = null; set @ColB = null;  select '&'   as 'Expected', COALESCE(NULLIF(COALESCE(@ColA, '') + COALESCE(@ColB, ''), ''), '&') as 'Actual'
set @ColA = null; set @ColB = '';    select '&'   as 'Expected', COALESCE(NULLIF(COALESCE(@ColA, '') + COALESCE(@ColB, ''), ''), '&') as 'Actual'
set @ColA = null; set @ColB = 'XYC'; select 'XYC' as 'Expected', COALESCE(NULLIF(COALESCE(@ColA, '') + COALESCE(@ColB, ''), ''), '&') as 'Actual'
set @ColA = '';   set @ColB = null;  select '&'   as 'Expected', COALESCE(NULLIF(COALESCE(@ColA, '') + COALESCE(@ColB, ''), ''), '&') as 'Actual'
set @ColA = '';   set @ColB = '';    select '&'   as 'Expected', COALESCE(NULLIF(COALESCE(@ColA, '') + COALESCE(@ColB, ''), ''), '&') as 'Actual'
set @ColA = '';   set @ColB = 'XYC'; select 'XYC' as 'Expected', COALESCE(NULLIF(COALESCE(@ColA, '') + COALESCE(@ColB, ''), ''), '&') as 'Actual'
set @ColA = 'ABC';set @ColB = null;  select 'ABC' as 'Expected', COALESCE(NULLIF(COALESCE(@ColA, '') + COALESCE(@ColB, ''), ''), '&') as 'Actual'
set @ColA = 'ABC';set @ColB = '';    select 'ABC' as 'Expected', COALESCE(NULLIF(COALESCE(@ColA, '') + COALESCE(@ColB, ''), ''), '&') as 'Actual'
set @ColA = 'ABC';set @ColB = 'XYC'; select 'ABC-XYC' as 'Expected', COALESCE(NULLIF(COALESCE(@ColA, '') + COALESCE(@ColB, ''), ''), '&') as 'Actual'
你认为我什么时候必须做一个大案子?我有很多这样的专栏,这会让人难以阅读

谢谢

更新:如果我使用case-when,那么我的选择看起来是这样的,这看起来很有效,但会很痛苦

select 
    case when (@ColA is not null and @ColA <> '') and
          (@ColB is not null and @ColB <> '') 
        then @ColA + '-' + @ColB
        else COALESCE(NULLIF(COALESCE(@ColA, '') + COALESCE(@ColB, ''), ''), '&')
    end

真希望有人能提出一些改进的建议

您可以使用这样的搜索案例函数吗

Select Case When isnull(ColA, '') + isnull(ColB, '') == '' Then '&'
            When isnull(ColA, '') <> '' and isnull(ColB, '') <> '' Then ColA + '-' + ColB
            Else isnull(ColA, '') + isnull(ColB, '')
From Table1

我认为这个答案与其他答案没有太大区别,但你可以试试这个:

SELECT
CASE
    WHEN NULLIF(ColA,'') <> '' AND NULLIF(ColB,'') <> ''
        THEN ColA + '-' + ColB
    WHEN NULLIF(ColA,'') <> '' OR NULLIF(ColB,'') <> ''
        THEN COALESCE(ColA,ColB)
    ELSE '&'
END

什么版本的SQL Server?不幸的是,SQL 2000。。。尽管好奇,SQL Server的更高版本中是否有一些新功能可以解决这个问题?SQL Server 2012有CONCAT,这可能会使事情稍微简单一些。