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
4 Réponses :
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
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.
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
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