SQL/MariaDB SELECT * FROM ..., KDE desetinné číslo

0

Otázka

Mám problém s SELECT. Chci udělat toto:

SELECT * FROM `table1` WHERE x=0.0509

ale to se vrátí žádné řádky. Vím jistě, že tam je řádek s hodnotou x hodnota 0.0509. Pokud ano:

SELECT * FROM `table1` WHERE x=0

To má ve skutečnosti vrátit všechny řádky, kde x=0, to znamená, že můj sql celkově je správné. Jak mohu VYBRAT, kde x je číslo s desetinnými místy? Předpokládám, že desetinných míst je příčinou problému?

mariadb sql
2021-11-23 08:50:39
2

Nejlepší odpověď

3

možná zkuste balancování hledaný termín mezi 2 hodnoty, jako je tento:

SELECT * FROM table1 WHERE x BETWEEN 0 AND 0.1;

To fungovalo pro mě :)

Foto zde

Edit: nemůžu najít žádný způsob, jak získat přesné desítkové soustavě, ale můžete pravděpodobně jen to udělat, ale aby hodnoty:

SELECT * FROM table1 WHERE x BETWEEN 0.05089999 AND 0.05090001;

To je pravděpodobně nejlepší způsob, jak to udělat, jsem si jistý, že

2021-11-23 09:48:16

Potřebuju čísla byla přesná, rozsah je dostatečně přesné :/
J. Doe

Pomocí tohoto SQL příkazu, je možné pro 0.050957 nebo 0.050955 být zahrnuty MEZI 0.050955 A 0.050957
J. Doe

Float není přesný, je pouze orientační..
jarlh

Jsem aktualizovány moje odpověď, je to to samé, ale pokud jste opravdu úzký čísla dolů, jako jsem to udělal, měli byste být schopni se dostat správnou věc, co potřebujete :)
benjamint08

Udělal jsem to takhle v node.js "x MEZI (?) A (?)",[ req.tělo["x"] - 0.0000001, req.tělo["x"] + 0.0000001]. To je dost přesné na to, jestli někdo má stejný problém, děkuji vám za vaši pomoc!
J. Doe

@j.doe Pokud hledáte pro přesné hodnoty, neměli byste ukládat je jako plováky, ukládat je jako numerické/typ desetinné místo.
MatBailie
1

Na FLOAT je přibližnou hodnotu. Takže, uložená hodnota není přesně 0.0509. Byste měli použít DECIMAL místo.

Vždy můžete převést hodnotu na DECIMAL.

SELECT * 
FROM table1 
WHERE cast(x as decimal(10,4))=0.0509
2021-11-23 09:01:53

Zatímco OBSAZENÍ() může překonat okamžité vydání, to bude zakázat používání index na sloupci. Ukládání dat jako DESETINNÉ číslo v první řadě je to správná odpověď (léčit základní příčinu, ne symptom).
MatBailie

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................