Mam system Joomla i próbuję zmienić wyszukiwanie, aby poprawnie znaleźć wartości zmiennoprzecinkowe w bazie danych.Sprawdź równość w polach MySQL Float
Tak, mam kwerendę, która jest wbudowana w czasie wykonywania, który wygląda mniej więcej tak:
select 'column1'
from 'some_table'
where 'some_float_field' <=> '2.18'
to nie zadziała, to nigdy nie pasuje nic, chociaż widzę rekordy w db z tej wartości tam.
Więc starałem się po prostu to zrobić w zamian:
select 'column1'
from 'some_table'
where 'some_float_field' <=> 2.18
bez powodzenia, więc potem próbował odlewania do przecinku (float nie działa z jakiegoś powodu), więc próbowałem to:
select 'column1'
from 'some_table'
where 'some_float_field' <=> CAST('2.18' AS DECIMAL(20, 2))
Brak kości ...
Należy pamiętać, że> = lub < = zwraca odpowiednich wyników, tylko < => daje mi problemów.
Jak uzyskać tutaj równość?
Tak, w tym przypadku staram się znaleźć "ciężar" czegoś, co umieszcza użytkownik, ale chcą dopasować dokładne liczby, więc muszę spełnić ten wymóg. – Joseph
Czy w tabeli wymagane jest posiadanie typu float? Zwykle, gdy użytkownicy chcą dokładnych liczb ułamkowych (na przykład pieniędzy), dziesiętny typ danych jest znacznie lepszym wyborem. Przez wiele lat będziesz mieć problemy z zaokrąglaniem. Pomyśl o tym. A jeśli to faktycznie pieniądze, przez przypadek, nie marnuj czasu i przeprojektuj dziesiętnie PRAWO TERAZ. Zaufaj mi, mówię tutaj z doświadczenia. –
Zgadzam się z Seva. Pierwszą rzeczą, którą robię przed rozpoczęciem pracy nad nową bazą danych, jest uruchomienie następującego zapytania i sprawdzenie, ile kolumn zmiennoprzecinkowych jest używanych. WYBIERZ DATA_TYPE, COUNT (*) JAK MIESZAĆ Z KATALOGU INFORMACJI. KOLUMNY GDZIE TABELA_SCHEMA NIE IN ("informacja_schemat", "mysql") GRUPA PRZEZ DATA_TYPE ORDER PRZEZ Mycount DESC Jeśli stwierdzę, że liczba podwójnych, zmiennoprzecinkowych, bigintów i bloków jest zbyt wysokie, zakładam, że będzie wiele problemów. Jeśli liczba dziesiętna, data, data/godzina, tinyint jest zbyt mała (lub zerowa), to znowu pojawia się problem :) – shantanuo