Просмотр полной версии : Не нашел в манах MySQL ничего
user6334
17.03.2016, 11:07
Не могу объяснить следующий корректный запрос:
Code:
SELECT * FROM `users` WHERE login = 'blablabla' + ''
Конечно, никакого пользователя blablabla в таблице нет, но запрос возвращает все записи. Что означает этот знак плюс?
BabaDook
17.03.2016, 13:07
user6334 said:
↑ (https://antichat.live/posts/3963985/)
Не могу объяснить следующий корректный запрос:
Code:
SELECT * FROM `users` WHERE login = 'blablabla' + ''
Конечно, никакого пользователя blablabla в таблице нет, но запрос возвращает все записи. Что означает этот знак плюс?
Пробел
user6334 said:
↑ (https://antichat.live/posts/3963985/)
Не могу объяснить следующий корректный запрос:
Code:
SELECT * FROM `users` WHERE login = 'blablabla' + ''
Конечно, никакого пользователя blablabla в таблице нет, но запрос возвращает все записи. Что означает этот знак плюс?
такой запрос эквивалент запросу
Code:
SELECT * FROM `users` WHERE login = 0
+ в мускле оператор сложения
зы. плохо искал кстати, http://dev.mysql.com/doc/refman/5.7/en/numeric-functions.html
user6334
17.03.2016, 13:49
BabaDook said:
↑ (https://antichat.live/posts/3964012/)
Пробел
Заменяем + на пробел, получаем:
Code:
SELECT * FROM `users` WHERE login = 'blablabla' ''
На выводе ничего. Значит не пробел.
user6334
17.03.2016, 13:57
Waki said:
↑ (https://antichat.live/posts/3964018/)
такой запрос эквивалент запросу
Code:
SELECT * FROM `users` WHERE login = 0
+ в мускле оператор сложения
зы. плохо искал кстати,
http://dev.mysql.com/doc/refman/5.7/en/numeric-functions.html
Про оператор сложения, это и так понятно )
Но, как понять login = 0 учитывая, что login имя пользователя, т.е. строчный тип
И почему запрос
Code:
SELECT * FROM `users` WHERE login = 0
возвращает всю таблицу, тогда как запрос
Code:
SELECT * FROM `users` WHERE login = 1
не возвращает ничего?
user6334 said:
↑ (https://antichat.live/posts/3964033/)
Про оператор сложения, это и так понятно )
Но, как понять login = 0 учитывая, что login имя пользователя, т.е. строчный тип
поле login преобразуется в integer, а там большинство строк будут равны 0
user6334
17.03.2016, 14:29
Waki said:
↑ (https://antichat.live/posts/3964042/)
поле login преобразуется в integer, а там большинство строк будут равны 0
С преобразованиями типов кажется разобрался ) Но так и не понял, почему запрос
Code:
SELECT * FROM `users` WHERE login = 'blablabla' + ''
или
Code:
SELECT * FROM `users` WHERE login = 'blablabla' + 'bebebe'
будет эквивалентен запросу
Code:
SELECT * FROM `users` WHERE login = 0
?
Может это из-за того, что знак плюс является арифметическим оператором, значит все, что он складывает приводиться к числовому типу?
Alex_gan
17.03.2016, 15:33
Правая часть из за сложения конвертирует оба слагаемых в цифры. Затем левую часть тоже пытается привести к числовому типу. Странно что при этом выдает результат, а не ошибку.
Оракл на такой же запрос ругается на несоответсвие типов и это логично.
user6334
17.03.2016, 16:05
Alex_gan said:
↑ (https://antichat.live/posts/3964078/)
Правая часть из за сложения конвертирует оба слагаемых в цифры. Затем левую часть тоже пытается привести к числовому типу. Странно что при этом выдает результат, а не ошибку.
Оракл на такой же запрос ругается на несоответсвие типов и это логично.
В Оракл и MYSQL знак плюс используется кроме арифметического сложения еще и для конкатенации строк
Alex_gan
17.03.2016, 16:20
На счет мускула не скажу, а вот в Оракле конкатенация строк это ||. Если + когда то и использовался для этого то в каких то совсем уж древнючих версиях.
user6334
17.03.2016, 16:51
Alex_gan said:
↑ (https://antichat.live/posts/3964102/)
На счет мускула не скажу, а вот в Оракле конкатенация строк это ||. Если + когда то и использовался для этого то в каких то совсем уж древнючих версиях.
Да, можно было использовать оба варианта, или 2 палки или +. Возможно, плюс уже канул в прошлое, я не проверял
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot