powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Приоритет операторов
10 сообщений из 10, страница 1 из 1
Приоритет операторов
    #40066938
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я правильно понимаю, что следующие выражения в PSQL Firebird аналогичны?

Код: sql
1.
if (old.locked = new.locked or old.locked >= 0 and new.locked >= 0) then

Код: sql
1.
if (old.locked = new.locked or (old.locked >= 0 and new.locked >= 0)) then
...
Рейтинг: 0 / 0
Приоритет операторов
    #40066954
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И до кучи: какой самый простой способ проверить что два числа имеют одинаковый знак, при условии что 0 - положительное число?
В голову приходит только проверка типа: a >= 0 and b >= 0 or a < 0 and b < 0 ...
...
Рейтинг: 0 / 0
Приоритет операторов
    #40066968
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp,

SIGN(a) = SIGN(b)
...
Рейтинг: 0 / 0
Приоритет операторов
    #40066971
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp
при условии что 0 - положительное число
Это всё ломает.
Проще прямого сравнения тоже пока не вижу.
...
Рейтинг: 0 / 0
Приоритет операторов
    #40066979
Alexander A. Sak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чтоб тому, кто будет сопровождать, жизнь медом не казалась, разовьем тему SIGN:
Код: plsql
1.
(sign(a) + 10*sign(b)) in (-11, 0, 10, 1, 11)
...
Рейтинг: 0 / 0
Приоритет операторов
    #40066981
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexander A. Sak,

Жёстко 😃
...
Рейтинг: 0 / 0
Приоритет операторов
    #40067022
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
(SIGN(a) + 0.5) * (SIGN(b) + 0.5) > 0


или
Код: sql
1.
2*SIGN(a)*SIGN(b) + SIGN(a) + SIGN(b) >= 0


Не мёд, конечно, но тоже не совсем сахар :)
...
Рейтинг: 0 / 0
Приоритет операторов
    #40067046
Фотография Старый плюшевый мишка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не, ну раз пошла такая пьянка, режь последний огурец

(Case When A=0 then 1 else A end)*(Case When B=0 then 1 else B end)>0

:)
...
Рейтинг: 0 / 0
Приоритет операторов
    #40067312
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
bin_and(a, 0x8000) = bin_and(b, 0x8000)


Но вопрос: если a и b - поля типа SMALLINT, то не будут ли они расширены до INTEGER при передаче в функцию?
...
Рейтинг: 0 / 0
Приоритет операторов
    #40067314
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя, можно же сделать вообще:
Код: sql
1.
bin_xor(a, b) >= 0



Но вопрос в эффективности этого метода по сравнению с 4мя сравнениями в исходном варианте?
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Приоритет операторов
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]