1
votes

Requête SQL incluse dans CONCAT uniquement si la cellule n'est pas vide

Je construis en utilisant CONCAT une longue chaîne, une cellule de DB ( design_name ) est dans certaines lignes vide (pas NULL , juste vider). Chaque valeur est séparée par _ Je voudrais ignorer la valeur lorsque cette cellule est vide, car dans ce cas, j'ai un double signe __ dans la chaîne finale. J'ai essayé d'utiliser CASE mais j'obtiens des erreurs.

SELECT CONCAT(year,t,id, ' - ', country, '_', year, '_',value, '_', order, 
CASE WHEN design_name != '' THEN '_', design_name, END '_', customer, '_', order) 
AS customer_projects
FROM projects WHERE customer = 'SAMPLE_CUSTOMER' 
ORDER BY id DESC


0 commentaires

4 Réponses :


0
votes

votre déclaration de cas est erronée

SELECT CONCAT(year,t,id, ' - ', country, '_', year, '_',value, '_', order, 
CASE WHEN design_name = '' THEN '_' else design_name END,  '_', customer, '_', "order") 
AS customer_projects
FROM projects WHERE customer = 'SAMPLE_CUSTOMER' 
ORDER BY id DESC


0 commentaires

1
votes

Vous vérifiez si design_name n'est pas égal à empty puis définissez-le sur '_' alors modifiez! = to = le fera fonctionner. code ci-dessous

SELECT CONCAT(year, t,id,  ' - ', isnull(country,''), '_', year, '_',
isnull(value,''), '_', isnull(order,''), 
CASE WHEN design_name = '' THEN '_' 
     ELSE design_name END '_', 
     isnull(customer,''), '_', isnull(order,'')) AS customer_projects
FROM projects WHERE customer = 'SAMPLE_CUSTOMER' 
ORDER BY id DESC

Si les champs-pays, valeur, commande, client de la table des projets autorisent null, il est conseillé d'utiliser isnull check sur eux. Comme si vous obtenez une valeur nulle dans votre requête, la fonction CONCAT renverra null et la requête échouera.


0 commentaires

1
votes

dans MySQL, votre déclaration CASE est fausse

Remplacez ceci

CASE WHEN design_name = '' THEN '_' ELSE design_name END,

par

CASE WHEN design_name != '' THEN '_', design_name, END


0 commentaires

0
votes

dans MySQL, j'utiliserais CONCAT_WS pour y parvenir comme suit, CONCAT_WS ajoutera le premier argument entre chaque valeur tout en ignorant les valeurs NULL

SELECT CONCAT_WS('_',CONCAT(year,t,id), country, year,value, order,(CASE WHEN design_name = '' THEN NULL ELSE design_name END), customer, order) AS customer_projects
FROM projects WHERE customer = 'SAMPLE_CUSTOMER' 
ORDER BY id DESC


0 commentaires