Почему десятичные поля принимают буквы в предложении where?

0

Я пробовал некоторые запросы в таблице, и я заметил, что в десятичном поле можно передавать буквы, в которых предложение получает все результаты

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 |

Как получить результаты, только если я использую числа в разделе, где с десятичной запятой?

Спасибо

Теги:

2 ответа

2
Лучший ответ

Чтобы сделать сравнение, MySQL преобразует строку a в число, которое приводит к 0

Полученный запрос

select cost from materials WHERE cost > 0;
1

Десятичный столбец не содержит буквы. Вместо этого вы сравниваете десятичное значение со строкой.

Что делает MySQL с такими смешанными сравнениями? Он преобразует значения в совместимый тип. В этом случае тип является числовым. Итак, 'a' преобразуется в число.

Какой номер? MySQL преобразует строки в числа, используя ведущие "числовые" символы (цифры, десятичная точка и отрицательный знак). 'a' не является "числом", поэтому ничего не преобразуется. Значение равно 0. Итак, ваше сравнение эквивалентно:

where cost > 0
  • 0
    Спасибо, но можно ли заставить myql не преобразовывать строку?
  • 0
    @PaoloRossi. , , Aa против преобразования в int. Я не вижу утилииту
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню