J'ai une table SQL avec une colonne float remplie de valeurs comme celles-ci:
1.4313
3.35
2.55467
6.22456
3.325
Je dois sélectionner des lignes contenant uniquement des valeurs avec plus de 4 décimales. Dans ce cas, la sélection doit renvoyer:
2.55467
6.22456
Des idées? Merci!
C'est ce que j'ai essayé jusqu'à présent
select *
from table
where CAST(LATITUDE AS DECIMAL(10,5)) - LATITUDE = 0
DECLARE @tbl TABLE (val float)
INSERT INTO @tbl SELECT 1234.567
INSERT INTO @tbl SELECT 1234.5678
INSERT INTO @tbl SELECT -1234.5678
INSERT INTO @tbl SELECT 1234.56789
SELECT *
from @tbl
where (((abs(val)*10000) - CONVERT(INT,(abs(val)*10000))) <> 0)
Pourquoi ne pouvons-nous pas simplifier les choses avec cette requête: -
SELECT * FROM table WHERE val LIKE '%.____%'
Cela sélectionne ce que nous voulons
SELECT *
FROM table WHERE
(abs(val)*100000)%10 <> 0
http://sqlfiddle.com/#!3/abadc/3/0
On dirait que quelque chose comme ça devrait marcher ...
tout ce qu'il fait est de convertir le nombre en un entier pour qu'il supprime les décimales après l'avoir multiplié * 10 par la puissance décimale dont vous avez besoin, puis il compare cette version int du nombre au nombre de base après qu'il a également été multiplié par 10, à la puissance de de décimales.
Si les nombres ne correspondent pas, vous avez un nombre de décimales supérieur à 4. S'ils correspondent, le nombre était de 4 ou moins.
Select *
from foo
where cast(myNum*power(10,4) as int) <> myNum*power(10,4)
S'il vous plaît essayer quelque chose comme:
select * from table
where RIGHT(CAST(value as DECIMAL(10,5)), value), 1) != 0
Les réponses données ne fonctionnaient pas pour moi avec MaxDb, mais cela ne fonctionnait pas:
where FLOOR(value * 10000) != value * 10000
Réduire/Augmenter les 0 pour moins/plus de précision.
C'est une question plus ancienne mais elle vérifie.
select val
from table
where ((val * 100) % 1) > 0
Changez 100 à votre précision.
Vous pouvez le multiplier par 10000
et le soustraire du nombre initial en remplaçant .
par ''
.
select * from tablename
where replace(numcolumn,'.','') - numcolumn * 10000 > 0
Vous trouverez ci-dessous le code qui vérifiera la précision pour 4 décimales:
MyNum
par la colonne que vous vérifiez pour la précisionMyTbl
par le tableau que vous utilisez4
par la précision recherchéeSql:
SELECT MyNum
, LEN(CAST (MyNum AS CHAR))
, -------1. length of decimal number, after conversion to CHAR
CHARINDEX('.', CAST (MyNum AS CHAR))
, ---2.length of numbers after the '.'
LEN(CAST (MyNum AS CHAR)) - CHARINDEX('.', CAST (MyNum AS CHAR)) -----subtracting 1-2, to get the length of numbers after decimal point '.'
FROM MyTbl
WHERE LEN(CAST(MyNum AS CHAR)) - CHARINDEX('.', CAST(MyNum AS CHAR)) > 4; --checking if there are more than 4 numbers after the decimal point '.'
Une autre solution également:
SELECT * from table
where (round(value,2) - round(value,4) <> 0)