Cela peut sembler simple, mais je ne suis pas un as de SQL et je me perds. Je comprends que SQL prend votre requête et l’exécute dans un certain ordre, ce qui explique pourquoi cette requête ne fonctionne pas:
select * from purchaseorders
where IsNumeric(purchase_order_number) = 1
and cast(purchase_order_number as int) >= 7
La plupart des champs purchar_order_number sont numériques, mais nous en avons récemment introduit des alphanumériques. Les données que j'essaye d'obtenir sont de voir si "7" est supérieur au chiffre d'achat le plus élevé.
La fonction Numeric () filtre parfaitement les champs alphanumériques, mais la comparaison de distribution ultérieure génère cette erreur:
Conversion failed when converting the nvarchar value '124-4356AB' to data type int.
Je ne demande pas ce que l'erreur signifie, c'est évident. Je demande s'il existe un moyen d'accomplir ce que je veux dans une requête unique, de préférence dans la clause where en raison de contraintes ORM.
est-ce que ça marche pour toi?
select * from purchaseorders
where (case when IsNumeric(purchase_order_number) = 1
then cast(purchase_order_number as int)
else 0 end) >= 7
Vous pouvez faire une sélection avec une sous-sélection
select * from (
select * from purchaseorders
where IsNumeric(purchase_order_number) = 1) as correct_orders
where cast(purchase_order_number as int) >= 7
essaye ça:
select * from purchaseorders
where try_cast(purchase_order_number as int) >= 7