Tengo un sistema Joomla y estoy tratando de cambiar la búsqueda para que encuentre correctamente los valores de coma flotante en la base de datos.Verificar la igualdad en un campo flotante de MySQL
lo tanto, tengo una consulta que se construyó en tiempo de ejecución que se ve algo como esto:
select 'column1'
from 'some_table'
where 'some_float_field' <=> '2.18'
Esto no funciona, nunca coincide con todo, a pesar de que veo registros en el PP con este valor ahí.
así que traté de hacer esto solo lugar:
select 'column1'
from 'some_table'
where 'some_float_field' <=> 2.18
No hubo suerte, por lo que entonces traté de fundición a un decimal (float no funciona por alguna razón), así que probamos este:
select 'column1'
from 'some_table'
where 'some_float_field' <=> CAST('2.18' AS DECIMAL(20, 2))
No hay dados ...
Tenga en cuenta que> = o = < devuelve los resultados apropiados, simplemente < => me da problemas.
¿Cómo consigo que la igualdad funcione aquí?
Sí, en este caso, estoy tratando de encontrar un "peso" de algo que el usuario está poniendo, pero ellos quieren hacer coincidir los números exactos, así que tengo que cumplir con los requisitos. – Joseph
¿Es un requisito del usuario tener un tipo de datos float en la tabla? Normalmente, cuando los usuarios desean números fraccionarios exactos (por ejemplo, dinero), el tipo de datos decimales es una opción mucho mejor. Obtendrá problemas de redondeo en los próximos años. Piénsalo. Y si realmente es dinero, por casualidad, no pierdas el tiempo y rediseña el decimal AHORA MISMO. Confía en mí, hablo por experiencia aquí. –
Estoy de acuerdo con Seva. Lo primero que hago antes de empezar a trabajar en una nueva base de datos es ejecutar la siguiente consulta y encontrar cuántas columnas flotantes se usan. SELECT DATA_TYPE, COUNT (*) COMO mycount FROM information_schema.COLUMNS WHERE TABLE_SCHEMA NOT IN ('information_schema', 'mysql') GROUP BY DATA_TYPE ORDER BY mycount DESC Si encuentro que el número de double, float, bigint y blobs es demasiado alto entonces supongo que habrá muchos problemas. Si el número de decimal, fecha, fecha y hora, tinyint es demasiado pequeño (o nill), entonces nuevamente hay un problema :) – shantanuo