Tôi có một hệ thống Joomla và tôi đang cố gắng thay đổi tìm kiếm để nó tìm đúng các giá trị dấu phảy động trong cơ sở dữ liệu.Kiểm tra sự bình đẳng trên một trường float MySQL
Vì vậy, tôi có một truy vấn mà được xây dựng trong thời gian chạy mà trông giống như sau:
select 'column1'
from 'some_table'
where 'some_float_field' <=> '2.18'
này không hoạt động, nó không bao giờ phù hợp với bất cứ điều gì, thậm chí mặc dù tôi thấy bản ghi trong db với giá trị này đó.
Vì vậy, tôi cố gắng chỉ làm điều này thay vì:
select 'column1'
from 'some_table'
where 'some_float_field' <=> 2.18
Không may mắn, vì vậy sau đó tôi đã cố gắng đúc đến một chữ số thập phân (float không hoạt động đối với một số lý do), vì vậy tôi cố gắng này:
select 'column1'
from 'some_table'
where 'some_float_field' <=> CAST('2.18' AS DECIMAL(20, 2))
Không xúc xắc ...
Hãy ghi nhớ rằng> = hoặc < = trả về kết quả đúng đắn, chỉ < => mang lại cho tôi vấn đề này.
Làm cách nào để tôi có được sự bình đẳng khi làm việc ở đây?
Vâng trong trường hợp này, tôi thực sự đang cố gắng tìm một "trọng lượng" của một cái gì đó mà người dùng đang đưa vào, nhưng họ muốn khớp chính xác các con số, vì vậy tôi phải đáp ứng yêu cầu. – Joseph
Có yêu cầu người dùng để có một kiểu dữ liệu nổi trong bảng không? Thông thường, khi người dùng muốn các số thập phân chính xác (e. G. Money), kiểu dữ liệu thập phân là một lựa chọn tốt hơn nhiều. Bạn sẽ nhận được các vấn đề làm tròn trong nhiều năm tới. Nghĩ về nó. Và nếu nó thực sự là tiền, bởi bất kỳ cơ hội, lãng phí không có thời gian và thiết kế lại cho thập phân NGAY BÂY GIỜ. Tin tôi đi, tôi nói từ kinh nghiệm ở đây. –
Tôi đồng ý với Seva. Việc đầu tiên tôi làm trước khi bắt đầu làm việc trên một cơ sở dữ liệu mới là chạy truy vấn sau và tìm thấy có bao nhiêu cột phao được sử dụng. SELECT DATA_TYPE, COUNT (*) AS số tiền của tôi TỪ thông tin_schema.COLUMNS WHERE TABLE_SCHEMA KHÔNG IN ('information_schema', 'mysql') GROUP BY DATA_TYPE ORDER BY mycount DESC Nếu tôi thấy rằng số lượng gấp đôi, float, bigint và blobs là quá cao thì tôi cho rằng sẽ có rất nhiều vấn đề. Nếu số thập phân, ngày tháng, ngày giờ, tinyint quá nhỏ (hoặc nill) thì lại có vấn đề :) – shantanuo