4

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

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

在 mysql 中,这意味着“如果 value > 0,则返回 value,否则返回 -1。” MonetDB 中是否有与此等效的功能?

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

谢谢

4

1 回答 1

6

据我所知,在 MonetDB 中没有与此等效的功能

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

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

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

我知道您不是在寻找 case语句,但是,根据SQL in a NutshellANSI 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;

此外 ,有关流控制的 monetdb 文档报告说它允许“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;

因此

 SELECT MY_CONV(value) FROM table;

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

于 2013-07-24T04:41:26.210 回答