Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« : 26-08-2005 04:45 » |
|
как сделать так, чтобы , скажем, SMALLINT использовать как 16 битовых флагов, причём в запросе можно было указать, какие флаги должны бать установлены /сброшены в выбранных записях?
например - выбрать все записи, где у поля field установлен 3 бит
|
|
|
Записан
|
|
|
|
Chaa
|
|
« Ответ #1 : 26-08-2005 05:24 » |
|
Синтаксис зависит от СУБД. Например для MySQL: SELECT * FROM t WHERE (x & 4)<>0 Здесь & - оператор побитового И (bitwise and) и 4 это двоичное 100 - т.е. установлен 3-й бит.
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #2 : 26-08-2005 07:01 » |
|
& не катит ...
|
|
|
Записан
|
|
|
|
Chaa
|
|
« Ответ #3 : 26-08-2005 07:09 » |
|
Какая СУБД?
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #4 : 26-08-2005 08:10 » |
|
база *.fdb
подключаюсь и работаю через Firebird1.5 , драйвер - OdbcJdbc.dll
|
|
|
Записан
|
|
|
|
Oldy
|
|
« Ответ #5 : 26-08-2005 10:32 » |
|
UDF bin_or, bin_and
SELECT * FROM t WHERE bin_and(t.f, 4)=4 // или bin_and(t.f, 4)<>0
Кажется так.
|
|
« Последнее редактирование: 26-08-2005 10:57 от Oldy »
|
Записан
|
С уважением, Oldy.
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #6 : 26-08-2005 10:57 » |
|
Олди, не, не катит:
select * from objects where bin_and(objects.nomer,1)=1
выдаётся ошибка:
An error was found in the application program input parameters for the SQL statement. Dynamic SQL Error. SQL error code = -804. Function unknown. BIN_AND.
|
|
|
Записан
|
|
|
|
Oldy
|
|
« Ответ #7 : 26-08-2005 11:00 » |
|
bin_and для начала надо подключить к базе.
DECLARE EXTERNAL FUNCTION bin_and INTEGER, INTEGER RETURNS INTEGER BY VALUE ENTRY_POINT 'IB_UDF_bin_and' MODULE_NAME 'ib_udf';
DECLARE EXTERNAL FUNCTION bin_or INTEGER, INTEGER RETURNS INTEGER BY VALUE ENTRY_POINT 'IB_UDF_bin_or' MODULE_NAME 'ib_udf';
|
|
« Последнее редактирование: 20-12-2007 20:33 от Алексей1153++ »
|
Записан
|
С уважением, Oldy.
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #8 : 26-08-2005 11:29 » |
|
а где это надо делать?
командой SQL ? (имеется в виду из экзешника)
|
|
|
Записан
|
|
|
|
Oldy
|
|
« Ответ #9 : 26-08-2005 18:18 » |
|
Это нужно сделать один единственный раз каким нибудь инструментом администратора, например isql.exe поставляемом вмести с сервером (\Firebird\Bin\).
|
|
|
Записан
|
С уважением, Oldy.
|
|
|
|