В моем SQL-запросе я пытаюсь объединить две строки в моем предложении select. Вот ожидаемые результаты:sql server query concat string с '-'
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'
Как вы думаете, что я должен сделать один гигантский случай, когда? У меня много таких столбцов, и это сделало бы невыносимым читать.
Спасибо!
ОБНОВЛЕНИЕ: если я использую случай, когда, тогда мой выбор выглядит так, что, похоже, работает, но будет больно.
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
действительно надеется, что у кого-то есть предложения по улучшению!
Какую версию SQL Server? –
к сожалению, sql 2000 ... (хотя любопытно, есть ли какая-то новая функция в более поздних версиях SQL Server, которая решит эту проблему?) – Raymond
SQL Server 2012 имеет 'CONCAT', который, возможно, упростил бы вещи. –