Comment écrire une requête SQL pour find toutes les lignes qui ont une valeur de devise float comme $ 15.34 dans un champ nvarchar

Comment écrivez-vous une requête SQL pour find seulement les lignes qui ont une valeur de devise float comme $ 15.34 et ne pas arrondir la valeur de devise comme 15 dans un champ nvarchar.

En supposant que vous avez un mélange de numérique et non numérique, cela devrait fonctionner pour returnner toutes les valeurs décimales qui ne sont pas des montants entiers:

 Select * from tablename where colname like '%.%' --Has a decimal (as in original query) and colname not like '%.00' --Does not end with 00 

C'est aussi simple que

 Select * from tablename where columnname = '15.34' 

Je supprimerais le $ out, et vérifierais si elle évalue à un numérique ou pas, et utiliser un modulo pour être sûr qu'un rest rest quand divisé par 1.

 DECLARE @TEST TABLE (columnname NVARCHAR(15)) INSERT INTO @TEST SELECT '$15.34' UNION SELECT 'ZERO' UNION SELECT '$123.00' SELECT *, CONVERT(MONEY,REPLACE(columnname,'$','')) FROM @TEST WHERE ISNUMERIC(REPLACE(columnname,'$',''))=1 AND CONVERT(MONEY,REPLACE(columnname,'$','')) % 1 != 0 

Vous pouvez utiliser comme

 Select * from Yourtablename where Yourcolumnname like '$15.%' 

Deux choses:

Tout d'abord, vous voulez find les lignes ayant le $ en eux.

 WHERE LOCATE('$',columname) <> 0 

Deuxièmement, vous voulez find les lignes où le rest de la valeur dans la colonne est un nombre à floating point.

  AND CONVERT(REPLACE(columnname,'$',''),DECIMAL(10,2)) <> 0 

Ce model CONVERT() <>0 fonctionne parce que MySQL renvoie zéro lorsque vous essayez de convertir une valeur non numérique en nombre.