0
votes

Valeurs de colonne Concat avec un séparateur dans SQL Server

Je veux concaténer les valeurs de colonne avec un séparateur et l'attribuer à la variable.

si la valeur de la colonne est null , il n'est pas nécessaire d'ajouter un séparateur.

Par exemple: A | B | C | D

si b est null a | c | d .

J'ai essayé avec Concat fonction, mais si B est null, il en résulte a || c | d xxx

@FLORID est un paramètre d'entrée de SP


5 commentaires

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.


4 Réponses :


0
votes

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


1 commentaires

Cette requête fonctionnera également dans des versions inférieures de SQL Server où la fonction Concat () n'est pas disponible.



0
votes
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; 

1 commentaires

C'est une très longue solution



0
votes

Sélectionner Couper ('|' de Regexp_replace ( Concat ('', '|' '', 'Colb', '|' ',' '', '' ',' '', '' ',' COLD ',' | ',' Cole ') , '[\ |] +' , '|' ,'g' ) )


2 commentaires

Testé sur Postgres


Bienvenue à! FYI, cette question pose une question sur SQL Server (voir les balises et le titre), pas postgres.



0
votes

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; 


0 commentaires