![]() |
Битовая обработка данных
Проблема в следующем:
В таблице БД имеется поле типа text фиксированной длины (57 символов). Очевидно, запись в этом поле будет занимать 57 байт, то есть 456 бит. Как средствами SQL проанализировать только конкрктные биты поля? К примеру, как сделать запрос, который проверит на равенство единице, скажем, 101-й и 300-й бит поля? Возможно, как-то с помощью битовых опираций, но как? Если у кого-нибудь будут какие-то мысли по этому поводу, помогите. Заранее благодарен. |
pralev,
начните здесь , особенно посмотрите там коментарий - вроде чтото похожее (то есть, Вам скорей всего нужны функция IF, и в ней уже проверять есть ли бит на нужном месте (то есть оператор &)) |
Битовые операции, вобще-то, не являются стандартным свойством реляционных БД.
Т. е. к ним не применимы многие стандартные "фенечки", например индексирование. При большом объеме данных это будет серьезный затык в производительности. По-этому в больших БД, часто жертвуют размером ради скорости, т. е. выделяют под битовое поле минимально возможное атомарное значение, например байт. Или используют не один столбец со значением text (который кстати тоже не описан в реляционной алгебре), а используют группу столбцов типа максимально-возможное целое (в вашем случае это будет 8 столбцов по 8 бит). В таком случае, например проверка на наличие 1цы, скажем в 7 разряде будет проходить как " > 127" Или же если функциональная матрица сильно разрежена (используются минимум пар: входное значение - выходное значение), пытаются перенести вычисления из булевой алгебры, в операции со множествами. |
Время: 12:16. |
Время: 12:16.
© OSzone.net 2001-