Функция MySQL bit_count довольно полезна в некоторых случаях:
http://dev.mysql.com/doc/refman/5.5/en/bit-functions.html#function_bit-count
Теперь я хотел бы использовать эту функцию в других базах данных, которые ее не поддерживают. Какой самый простой способ сделать это (без создания хранимой функции, поскольку у меня нет доступа к клиентской базе данных на уровне DDL).
Вот один довольно подробный вариант (для TINYINT
типов данных):
SELECT (my_field & 1) +
(my_field & 2) >> 1 +
(my_field & 4) >> 2 +
(my_field & 8) >> 3 +
(my_field & 16) >> 4 +
...
(my_field & 128) >> 7
FROM my_table
В случае Sybase SQL Anywhere оператор >>
, по-видимому, недоступен, поэтому работает также деление на 2, 4, 8, 16
.
Есть ли другие, менее подробные варианты?