Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / IBM DB2, WebSphere, IMS, U2, etc Новый топик    Ответить
 Как выполнить булевские операции с полями в запросе?  [new]
vick_man
Member

Откуда:
Сообщений: 6
В Postgres есть к примеру такая вещь
select field1 | 1 from table1
Т.е. <значение из field1> or 1

А как можно сделать тоже самое в DB2?
25 окт 05, 21:04    [2005220]     Ответить | Цитировать Сообщить модератору
 Re: Как выполнить булевские операции с полями в запросе?  [new]
nkulikov
Guest
Читаем сначала Cookbook
http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM
26 окт 05, 10:19    [2006421]     Ответить | Цитировать Сообщить модератору
 Re: Как выполнить булевские операции с полями в запросе?  [new]
vick_man
Member

Откуда:
Сообщений: 6
Так вот читал, но не могу найти ничего подобного в DB2.
26 окт 05, 12:32    [2007291]     Ответить | Цитировать Сообщить модератору
 Re: Как выполнить булевские операции с полями в запросе?  [new]
nkulikov
Guest
COALESCE?

with temp (id,i) as (values(1,null),(2,2),(3,3))

SELECT id,i ,COALESCE(i,0) FROM temp
26 окт 05, 14:40    [2008148]     Ответить | Цитировать Сообщить модератору
 Re: Как выполнить булевские операции с полями в запросе?  [new]
Herr Developer
Guest
nkulikov
COALESCE?

with temp (id,i) as (values(1,null),(2,2),(3,3))

SELECT id,i ,COALESCE(i,0) FROM temp

Можно еще VALUE scalar function
The VALUE function returns the first argument that is not null.
VALUE is a synonym for COALESCE.
:-)
26 окт 05, 15:10    [2008309]     Ответить | Цитировать Сообщить модератору
 Re: Как выполнить булевские операции с полями в запросе?  [new]
vick_man
Member

Откуда:
Сообщений: 6
Наверно я не так объяснил,
имелось в виду такое выражение:
100 or 16 = 116
112 or 16 = 112
120 or 16 = 120
128 or 16 = 144
26 окт 05, 15:33    [2008468]     Ответить | Цитировать Сообщить модератору
 Re: Как выполнить булевские операции с полями в запросе?  [new]
nkulikov
Guest
100 + 16 = 116
112 + 16 = 112
120 + 16 = 120
128 + 16 = 144
????
26 окт 05, 15:53    [2008610]     Ответить | Цитировать Сообщить модератору
 Re: Как выполнить булевские операции с полями в запросе?  [new]
vick_man
Member

Откуда:
Сообщений: 6
120+16=120 ???
Это операция OR, а не "+"
26 окт 05, 16:25    [2008790]     Ответить | Цитировать Сообщить модератору
 Re: Как выполнить булевские операции с полями в запросе?  [new]
gardenman
Member

Откуда: С-Петербург
Сообщений: 2347
Придется писать на C
26 окт 05, 16:30    [2008827]     Ответить | Цитировать Сообщить модератору
 Re: Как выполнить булевские операции с полями в запросе?  [new]
nkulikov
Guest
Я не понимаю вопроса....
26 окт 05, 19:07    [2009703]     Ответить | Цитировать Сообщить модератору
 Re: Как выполнить булевские операции с полями в запросе?  [new]
golsa
Member

Откуда: Красноярск
Сообщений: 789
2 nkulikov
Речь едет о побитных операциях:
0 OR 0 = 0, 0 OR 1 = 1, 1 OR 0 =1, 1 OR 1 = 1
0 XOR 0 = 0, 0 XOR 1 = 1, 1 XOR 0 =1, 1 XOR 1 = 0
0 AND 0 = 0, 0 AND 1 = 0, 1 AND 0 =0, 1 AND 1 = 1


2 vick_man
В чистом виде можно только выделить бит:
(Field mod 32) mod 2
это для 5 бита - 2**5 = 32

А OR, XOR и AND можно реализовать самому через пользовательскую функцию написанную на С или любом другом языке позволяющем делать DLL.
27 окт 05, 08:55    [2010514]     Ответить | Цитировать Сообщить модератору
 Re: Как выполнить булевские операции с полями в запросе?  [new]
Und
Member

Откуда:
Сообщений: 2
на си писать не обязательно:
http://www-128.ibm.com/developerworks/db2/library/techarticle/dm-0504greenstein/
27 окт 05, 14:16    [2012527]     Ответить | Цитировать Сообщить модератору
 Re: Как выполнить булевские операции с полями в запросе?  [new]
gardenman
Member

Откуда: С-Петербург
Сообщений: 2347
Und
на си писать не обязательно:
http://www-128.ibm.com/developerworks/db2/library/techarticle/dm-0504greenstein/

Оно конечно верно, но если речь зайдет о производительности, то я так делать не стал бы.
27 окт 05, 15:20    [2012930]     Ответить | Цитировать Сообщить модератору
Все форумы / IBM DB2, WebSphere, IMS, U2, etc Ответить