2016-06-16 4 views
0

Согласно MySQL Reference Manual - The SET Typeразница между WHERE FIND_IN_SET (...)> 0 и ГДЕ FIND_IN_SET (...)

Обычно, вы поиск значений SET с помощью функции FIND_IN_SET() или LIKE оператора:

mysql> SELECT * FROM tbl_name WHERE FIND_IN_SET ('значение', set_col)> 0;

Согласно MySQL Reference Manual

FIND_IN_SET (ул, strlist)

возвращает значение в диапазоне от 1 до N, если строка ул находится в списке строк strlist, состоящих из N подстрок. Строковый список - это строка, состоящая из подстрок, разделенных символами «,». Если первый аргумент является константой, а второй - столбцом типа SET, функция FIND_IN_SET() оптимизирована для использования битовой арифметики. Возвращает 0, если str не в strlist или strlist - это пустая строка. Возвращает NULL, если любой аргумент равен NULL.

Поэтому, я думаю, что

SELECT * FROM tbl_name WHERE FIND_IN_SET('value',set_col) 

работает должным образом, когда вы хотите, чтобы найти значение из набора.

Так почему же пример из Справочного руководства по MySQL явно сравнивается с >0?

Есть ли разница?

+0

Фактически оба эти же. – 1000111

ответ

1

Рассмотрим следующие два WHERE положения:

WHERE FIND_IN_SET('value', set_col) > 0 
WHERE FIND_IN_SET('value', set_col) 

В первой, если любой из записей в sel_col содержит value, то возвращаемое значение для FIND_IN_SET() будет некоторое число больше 0, в противном случае это будет 0. Другими словами, он вернет TRUE, если найдено value, а FALSE в противном случае.

WHERE Второй раздел будет оценивать либо WHERE X, где X является либо 1 или больше, если value быть найдены, или 0, если value быть не найден. В MySQL значение 0 является синонимом FALSE, а положительное число 1 или больше - это синоним TRUE (см. documentation).

Таким образом, эти две статьи WHERE будут вести себя одинаково.

Смежные вопросы