Je veux concaténer les valeurs de colonne avec un séparateur et l'attribuer à la variable.
si la valeur de la colonne est Par exemple: si b est null J'ai essayé avec null code>, il n'est pas nécessaire d'ajouter un séparateur. p> A | B | C | D P | D > a | c | d code>. p> Concat code> fonction, mais si B est null, il en résulte a || c | d code> p> @FLORID code> est un paramètre d'entrée de SP P> P >
4 Réponses :
Vous pouvez essayer la requête suivante.
create table tblFloor_Master (FloorID int identity(1, 1),
FloorCode char(1),
FloorName char(1),
BuildingID char(1),
HCMLocationCode char(1))
insert into tblFloor_Master values ('A', NULL, 'C', 'D')
GO
--To create a procedure
create proc uspGetConcateValue
@FloorId int
as
BEGIN
select * into #tblFloor_Master from(
select FloorId, FloorCode as Value from tblFloor_Master where FloorCode is not null
union
select FloorId, FloorName as Value from tblFloor_Master where FloorName is not null
union
select FloorId, BuildingID as Value from tblFloor_Master where BuildingID is not null
union
select FloorId, HCMLocationCode as Value from tblFloor_Master where HCMLocationCode is not null
)a
SELECT FloorId
,STUFF((SELECT '|' + CAST(Value AS VARCHAR(10)) [text()]
FROM #tblFloor_Master
WHERE FloorId = t.FloorId
FOR XML PATH(''), TYPE)
.value('.','NVARCHAR(MAX)'),1,1,'') List_Output
FROM #tblFloor_Master t
where FloorID = @FloorId
GROUP BY FloorId
END
Cette requête fonctionnera également dans des versions inférieures de SQL Server où la fonction Concat () n'est pas disponible.
SELECT @OldValue = CONCAT('',
CASE WHEN [FloorCode] IS NULL THEN '' ELSE CONCAT([FloorCode],'|') END,
CASE WHEN [FloorName] IS NULL THEN '' ELSE CONCAT([FloorName],'|') END,
CASE WHEN [BuildingID] IS NULL THEN '' ELSE CONCAT([BuildingID],'|') END,
CASE WHEN [HCMLocationCode] IS NULL THEN '' ELSE CONCAT([HCMLocationCode],'|') END,
[IsActive])
FROM tblFloor_Master
WHERE FloorID = @FloorID;
C'est une très longue solution
Sélectionner Couper ('|' de Regexp_replace ( Concat ('', '|' '', 'Colb', '|' ',' '', '' ',' '', '' ',' COLD ',' | ',' Cole ') , '[\ |] +' , '|' ,'g' ) ) p>
Testé sur Postgres
Bienvenue à! FYI, cette question pose une question sur SQL Server (voir les balises et le titre), pas postgres.
devrait être simple comme tout remplacer code>, remplacer || à | puis remplacer ||| à | depuis le nombre maximum de | est 3. DECLARE @OldValue VARCHAR(8000);
SELECT @OldValue = replace(replace(CONCAT([FloorCode],'|',
[FloorName],'|',
[BuildingID],'|',
[HCMLocationCode],'|',
[IsActive]),'||','|'),'|||','|')
FROM tblFloor_Master
WHERE FloorID = @FloorID;
Qu'essayez-vous, pouvez-vous s'il vous plaît ajouter ce code?
Pouvez-vous mettre votre table réelle avec des données et des résultats attendus?
Dupliqué possible de Comment concaténer le texte de plusieurs lignes dans une seule chaîne de texte dans SQL Server?
@ R.nanayakkara - a ajouté le code dans le post
@Sreelalt Vérifiez pour NULL et effectuez le formatage. Voir la réponse ci-dessous. Les réponses de Suraj Kumar vous donneront également la sortie souhaitée.