Я пробовал некоторые запросы в таблице, и я заметил, что в десятичном поле можно передавать буквы, в которых предложение получает все результаты
CREATE TABLE materials (
id INT AUTO_INCREMENT PRIMARY KEY,
description VARCHAR(255),
cost DECIMAL(19 , 4 ) NOT NULL
);
INSERT INTO materials(description,cost)
VALUES('Bicycle', 500.34),('Seat',10.23),('Break',5.21);
ВЫБРАТЬ
select cost from materials WHERE cost > 'a';
РЕЗУЛЬТАТ
| cost |
|--------|
| 500.34 |
| 10.23 |
| 5.21 |
Как получить результаты, только если я использую числа в разделе, где с десятичной запятой?
Спасибо
Чтобы сделать сравнение, MySQL преобразует строку a
в число, которое приводит к 0
Полученный запрос
select cost from materials WHERE cost > 0;
Десятичный столбец не содержит буквы. Вместо этого вы сравниваете десятичное значение со строкой.
Что делает MySQL с такими смешанными сравнениями? Он преобразует значения в совместимый тип. В этом случае тип является числовым. Итак, 'a'
преобразуется в число.
Какой номер? MySQL преобразует строки в числа, используя ведущие "числовые" символы (цифры, десятичная точка и отрицательный знак). 'a'
не является "числом", поэтому ничего не преобразуется. Значение равно 0
. Итак, ваше сравнение эквивалентно:
where cost > 0