Есть ли в MonetDB функция, эквивалентная IF?
Мне нужно сделать что-то вроде этого в MonetDB:
select
If(value > 0, value, -1) as selected_value
from
table
В mysql это означает "возвращаемое значение, если значение> 0, в противном случае возвращает -1". Есть ли эквивалентная функция для этого в MonetDB?
И я не ищу изложения дела. Я знаю, что существует как в MonetDB, так и в других языках SQL. Я хотел бы конкретно узнать что-то вроде примера, который я привел.
Спасибо
1 ответ
Насколько я знаю, в MonetDB такой функции нет.
Функция if() является частью расширений MySQL к стандартному SQL, но это расширение не является частью встроенной функции monet.
Как и во многих других базах данных SQL, также в monetdb отсутствует функция "IF()", поскольку она не является частью стандартного языка SQL.
Для других доказательств посмотрите этот вопрос и попробуйте свой запрос в стандартном парсере.
Мне известно, что вы не ищете оператор case, как бы то ни было, согласно SQL в двух словах: ANSI SQL2003 предоставляет функцию с именем CASE], которую можно использовать для создания логики управления потоком IF-THEN в запросах или операторах обновления,
Функция CASE обеспечивает функциональность IF-THEN-ELSE в операторе SELECT или UPDATE. Он оценивает список условий и возвращает одно значение из нескольких возможных значений.
CASE имеет два использования: простое и поисковое. Простые выражения CASE сравнивают одно значение input_value со списком других значений и возвращают результат, связанный с первым соответствующим значением. Найденные выражения CASE позволяют анализировать несколько логических условий и возвращать результат, связанный с первым, который является истинным.
Поддерживаемые функции monetdb включают в себя:
- F261: выражение CASE
- F261-01: простой случай
- F261-02: искал дело
Поэтому, на мой взгляд, лучший шанс для кодирования "операции поиска Булева":
SELECT
CASE WHEN value > 0 THEN value ELSE -1 END AS selected_value
FROM
table;
Более того, документация monetdb о flowcontrol сообщает, что он допускает "СЛУЧАЙ КОГДА" и "ПОСЛЕ ТОГО, ЧТО ЕЩЕ", а стандарт SQL позволяет создавать функции SQL, и MonetDB имеет такую поддержку.
Я думаю, но я не поощряю и не проверяю, что вы можете определить свою собственную функцию; что-то вроде того:
CREATE FUNCTION MY_CONV(value int)
RETURNS int
BEGIN
IF (value > 0)
THEN RETURN value
ELSE RETURN -1;
END IF;
END;
следовательно
SELECT MY_CONV(value) FROM table;
Еще сложнее можно попробовать закодировать UserDefinedFunction