J'ai un problème d'autre cas dans l'instruction SQL.
Dans ma colonne de table SQL, L_Keyword2
contient la valeur ci-dessous et est de type varchar
.
YES, LAND INCLUDED, N/APPLICABLE, 3, 1.5, NO, 4.5+, OTHER, NULL, 2, 1, LAND LEASED, 0, 3.5, N/A, OE, 4, 2.5,
Lorsque j'utilise cette colonne dans une déclaration de cas comme
SELECT L_Keyword2, CASE WHEN class LIKE 'RE_1' THEN L_Keyword2 ELSE 0 END FROM Mytable
Cette requête SQL génère une erreur:
La conversion a échoué lors de la conversion de la valeur varchar '1.5' en type de données int.
Pourquoi cette requête SQL provoque-t-elle une erreur de conversion? Même moi, je n'y ai pas fait de conversion.
Peut être ça:
SELECT L_Keyword2, CASE WHEN class LIKE 'RE_1' THEN L_Keyword2 ELSE '0' END FROM Mytable
Si vous voulez utiliser LIKE
mettre %
wildcard. Sinon, il s'agit d'une simple comparaison ( WHEN class = 'RE_1'
).
Premièrement, CASE
dans T-SQL n'est pas une déclaration – c'est une expression . En tant que tel, toutes les valeurs qu'il peut renvoyer de ses différentes clauses WHEN
doivent être du même type de données , et si elles ne le sont pas, SQL Server a une list de précédence ( voir la documentation MSDN pertinente pour plus de détails ). list, int
varie plus haut que varchar
Dans votre cas, le CASE
renvoie évidemment un int
de la clause ELSE
, donc il essaie de returnner la valeur de L_Keyword2
(à partir de la première clause WHEN ... THEN ...
) en tant Int
aussi, et échoue donc.