我需要在MonetDB中做这样的事情:
select
If(value > 0, value, -1) as selected_value
from
table
在mysql中,这意味着'如果值>返回值> 0,否则返回-1。 在MonetDB中是否有与此相同的功能?
我不是在寻找案例陈述。我知道它存在于MonetDB和其他sql语言中。我想特别知道我给出的例子。
谢谢
答案 0 :(得分:5)
据我所知在MonetDB中没有与此相同的功能。
The if() function是MySQL 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表达式允许分析几个逻辑条件并返回与第一个相关的结果,该结果为真。
因此,在我看来,最好的机会是编码''布尔搜索操作'是:
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