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

时间:2013-07-19 14:40:00

标签: sql monetdb

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

select
  If(value > 0, value, -1) as selected_value
from
  table

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

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

谢谢

1 个答案:

答案 0 :(得分:5)

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

The if() functionMySQL Extensions to Standard SQL的一部分,但此扩展名不属于monet builtin function

与许多其他SQL数据库一样, monetdb 也不可用 'IF()'函数,因为它不是标准SQL语言的一部分。

有关其他证据,请参阅this question并在standard parser中尝试查询。

根据SQL in a Nutshell,我知道您并不是在寻找案例声明 ANSI SQL2003提供了一个名为CASE的函数可用于在查询或更新语句中创建 IF-THEN流控制逻辑

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

CASE有两个用法:简单和搜索。简单CASE表达式将一个值input_value与其他值列表进行比较,并返回与第一个匹配值关联的结果。搜索的CASE表达式允许分析几个逻辑条件并返回与第一个相关的结果,该结果为真。

monetdb supported features包括:

  • F261:案例表达
  • F261-01:简单案例
  • F261-02:搜索CASE

因此,在我看来,最好的机会是编码''布尔搜索操作'是:

SELECT 
  CASE WHEN value > 0 THEN value ELSE -1 END AS selected_value
FROM
  table;

此外 The monetdb dcumentation about flowcontrol报告它允许'CASE WHEN'和'if THEN ELSE'并且SQL标准允许创建SQL函数和MonetDB has this support

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

 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