gpt4 book ai didi

sql - 如何在 Informix SE SQL 查询中执行 NVL(或 DECODE 或 CASE)语句?

转载 作者:搜寻专家 更新时间:2023-10-30 21:55:05 26 4
gpt4 key购买 nike

IBM 对他的 Informix Standard Engine 很清楚,它既不支持 CASE,也不支持 DECODE。 “请升级到新版本”:http://www-01.ibm.com/support/docview.wss?rs=632&context=SSGU5Y&dc=DB560&dc=DB520&uid=swg21189712&loc=en_US&cs=UTF-8&lang=en&rss=ct632db2

这永远不会发生!

所以也许有人可以有一个想法。我想要相当于:

Select NVL(c1, c2) from MyTable

最佳答案

CREATE PROCEDURE NVL(a CHAR(32), b CHAR(32) DEFAULT NULL,
c CHAR(32) DEFAULT NULL,
d CHAR(32) DEFAULT NULL,
e CHAR(32) DEFAULT NULL,
f CHAR(32) DEFAULT NULL,
g CHAR(32) DEFAULT NULL)
RETURNING CHAR(32);
IF a IS NOT NULL THEN RETURN a;
ELIF b IS NOT NULL THEN RETURN b;
ELIF c IS NOT NULL THEN RETURN c;
ELIF d IS NOT NULL THEN RETURN d;
ELIF e IS NOT NULL THEN RETURN e;
ELIF f IS NOT NULL THEN RETURN f;
ELSE RETURN g;
END IF;
END PROCEDURE;

或者 - 更一般地:

-- @(#)$Id: nvl_int.spl,v 1.1 1996/08/26 18:33:11 johnl Exp $
--
-- nvl_integer: return v1 if it is not null else return v2

CREATE PROCEDURE nvl_integer(v1 INTEGER, v2 INTEGER DEFAULT 0)
RETURNING INTEGER;

DEFINE rv INTEGER;

IF v1 IS NOT NULL THEN
LET rv = v1;
ELSE
LET rv = v2;
END IF

RETURN rv;

END PROCEDURE;

CHAR 版本几乎可以用于任何类型(长度超过 32 位的字符串除外,如所写),因为 SE 非常擅长在类型之间进行转换。 SE 也不支持显式转换——可以安全地假设 SE 没有太多超过 SQL-89 的 SQL。

关于sql - 如何在 Informix SE SQL 查询中执行 NVL(或 DECODE 或 CASE)语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1042550/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com