Почему не работает запрос?

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Почему не работает запрос?

Сообщение Alexanbar » 19.07.2006 (Ср) 18:24

Есть такой запрос (Access97)

Код: Выделить всё
SELECT *
FROM Accounts
WHERE (Accounts.[Flags] and 1)=1;


Он должен выдавать те записи, где первый двоичный разряд поля Flags (длинное целое) установлен в 1. Таких записей примерно половина, а возвращается ни одной.

Работает только так:
Код: Выделить всё
SELECT *
FROM Accounts
WHERE Accounts.[Flags] =1;


Естественно, для тех записей, где Flag равен точно единице.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 19.07.2006 (Ср) 18:52

Разумеется, AND в SQL никогда не выполнял бинарные операции.
Попробуй указать & ([Flags] & 1), но не уверен, что Access такое переварит. Если не переварит, то можешь написать пользовательскую публичную функцию, которая будет сравнивать биты.
Lasciate ogni speranza, voi ch'entrate.

Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Сообщение Alexanbar » 19.07.2006 (Ср) 20:20

alibek писал(а):Попробуй указать & ([Flags] & 1)


Пробовал. не помогает.

НУ, вообще-то, я базу в VB6 открываю, а в качестве источника - этот запрос.

Не думал, что такую ерунду с запросе делать нельзя

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Сообщение Nicky » 20.07.2006 (Чт) 7:20

Да четность проверяй!

HandKot
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 28.06.2006 (Ср) 13:34
Откуда: Sergiev Posad

Сообщение HandKot » 20.07.2006 (Чт) 10:18

AND - это логическая, а не бинарная операция

в Акцесс 2000 есть битовае операции BAND, BOR, BXOR
возможно они есть и в 97

ЗЫЖ чтобы они заработали надо Сервис-Параметры-Таблицы и запросы крыжик Синтаксис для SQLServer выставить


либо искать другие варианты

Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Сообщение Alexanbar » 20.07.2006 (Чт) 22:43

ПОхоже, BAND не работает в 97. И параметров таких нету

HandKot
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 28.06.2006 (Ср) 13:34
Откуда: Sergiev Posad

Сообщение HandKot » 21.07.2006 (Пт) 9:11

тута нарыл выделение ТОЛЬКО одного бита

Проверка установки 4го бита:
Код: Выделить всё
(([Поле]\8) Mod 2) =1


может поможет

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Сообщение Nicky » 21.07.2006 (Пт) 9:51

Код: Выделить всё
select * from t1 where (f1 \ 2 ^ 0) mod 2 > 0
select * from t1 where (f1 \ 2 ^ 1) mod 2 > 0
select * from t1 where (f1 \ 2 ^ 2) mod 2 > 0
...

Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Сообщение Alexanbar » 21.07.2006 (Пт) 11:47

Работает вроде :)


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 1

    TopList