Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Приоритет операторов / 10 сообщений из 10, страница 1 из 1
28.04.2021, 19:15
    #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
28.04.2021, 19:42
    #40066954
alekcvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Приоритет операторов
И до кучи: какой самый простой способ проверить что два числа имеют одинаковый знак, при условии что 0 - положительное число?
В голову приходит только проверка типа: a >= 0 and b >= 0 or a < 0 and b < 0 ...
...
Рейтинг: 0 / 0
28.04.2021, 20:13
    #40066968
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Приоритет операторов
alekcvp,

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

Жёстко 😃
...
Рейтинг: 0 / 0
28.04.2021, 22:58
    #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
29.04.2021, 03:19
    #40067046
Старый плюшевый мишка
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Приоритет операторов
Не, ну раз пошла такая пьянка, режь последний огурец

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

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


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



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


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