Есть ли в 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

Другие вопросы по тегам