Sql server 带“-”的sql server查询concat字符串
在SQL查询中,我试图在select子句中连接两个字符串。以下是预期结果: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
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,这可能会使事情稍微简单一些。