MonetDB中的函数是否等同于IF?

Mar*_*ina 3 sql monetdb

我需要在MonetDB中做这样的事情:

select
  If(value > 0, value, -1) as selected_value
from
  table
Run Code Online (Sandbox Code Playgroud)

在mysql中,这意味着'如果值> 0则返回值,否则返回-1.' 在MonetDB中是否有与此相同的功能?

我不是在寻找案例陈述.我知道它存在于MonetDB和其他sql语言中.我想特别知道我给出的例子.

谢谢

Fra*_*ini 5

据我所知,在MonetDB中没有与此相同的功能.

if()函数MySQL Extensions to Standard SQL的一部分,但是这个扩展不是monet内置函数的一部分

像许多其他SQL数据库一样,monetdb中也没有'IF()'函数,因为它不是标准SQL语言的一部分.

有关其他证据,请参阅此问题并在标准解析器中尝试查询.

我知道你不是在寻找一个案例陈述,无论如何,根据SQL中的一个Nutshell:ANSI SQL2003提供了一个名为CASE的函数,可用于在查询或更新语句中创建IF-THEN流控制逻辑.

CASE函数在SELECT或UPDATE语句中提供IF-THEN-ELSE功能.它评估条件列表并从几个可能的值中返回一个值.

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;
Run Code Online (Sandbox Code Playgroud)

此外 ,关于flowcontrol的monetdb dcumentation报告它允许'CASE WHEN'和'if THEN ELSE'以及SQL标准允许创建SQL函数,而MonetDB有这种支持.

我想,但我不鼓励也不测试,你可以定义自己的功能; 类似的东西:

 CREATE FUNCTION MY_CONV(value int)
 RETURNS int
 BEGIN
    IF (value > 0)
        THEN RETURN value
        ELSE RETURN -1;
    END IF;
 END;
Run Code Online (Sandbox Code Playgroud)

于是

 SELECT MY_CONV(value) FROM table;
Run Code Online (Sandbox Code Playgroud)

更复杂的可能是尝试编写UserDefinedFunction