GBase 8s数据类型boolean与int转换写法(临时使用)
GBase 8s数据库的boolean类型取值为:'t','f',null。其它数据库可接受对应的1,0,null的数值写法。为了兼容使用,可临时自定义转换及等值及不等值操作函数的方式实现兼容。
以下为自定义转换,及等值(equal)及不等值(notequal)函数写法示例:
SET environment sqlmode 'gbase';
DROP FUNCTION IF EXISTS int2boolean(int);
-- 允许接受空值
CREATE FUNCTION int2boolean(p1 int)
RETURNS boolean WITH (NOT variant);
IF p1 = 0 THEN
RETURN 'f';
ELIF p1 IS NULL THEN
RETURN NULL;
END IF;
RETURN 't';
END FUNCTION;
DROP CAST IF EXISTS(int as boolean);
-- 创建转换:int转换为boolean,使用int2boolean函数;
CREATE implicit CAST IF NOT EXISTS (int AS boolean WITH int2boolean);
DROP FUNCTION IF EXISTS equal(boolean,int);
-- 两个参数需转换为第三类数据类型,否则可能带来递归。
CREATE FUNCTION equal(p1 boolean, p2 int)
RETURNS boolean WITH (NOT variant);
DEFINE v_p1 CHAR(1);
DEFINE v_p2 CHAR(1);
LET v_p1 = CAST(p1 AS CHAR);
LET v_p2 = CAST(p2 AS CHAR);
IF (v_p1 IN ('t','1') AND v_p2 IN ('t','1'))
OR (v_p1 IN ('f','0') AND v_p2 IN ('f','0')) THEN
RETURN 't';
ELSE
RETURN 'f';
END IF;
END FUNCTION;
DROP FUNCTION IF EXISTS notequal(boolean,int);
CREATE FUNCTION notequal(p1 boolean, p2 int)
RETURNS boolean WITH (NOT variant);
DEFINE v_p1 CHAR(1);
DEFINE v_p2 CHAR(1);
LET v_p1 = CAST(p1 AS CHAR);
LET v_p2 = CAST(p2 AS CHAR);
IF (v_p1 IN ('t','1') AND v_p2 IN ('f','0'))
OR (v_p1 IN ('f','0') AND v_p2 IN ('t','1')) THEN
RETURN 't';
ELSE
RETURN 'f';
END IF;
END FUNCTION;
DROP FUNCTION IF EXISTS equal(int,boolean);
CREATE FUNCTION equal(p2 int,p1 boolean)
RETURNS boolean WITH (NOT variant);
RETURN equal(p1,p2);
END FUNCTION;
DROP FUNCTION IF EXISTS notequal(int,boolean);
CREATE FUNCTION notequal(p2 int,p1 boolean)
RETURNS boolean WITH (NOT variant);
RETURN notequal(p1,p2);
END FUNCTION;测试示例:
CREATE TABLE tabbool(col1 int, col2 boolean);
INSERT INTO tabbool values(1,1),(2,0),(3,-1),(4,null);
SELECT * FROM tabbool;
SELECT * FROM tabbool WHERE 0 != col2;
SELECT * FROM tabbool WHERE col2 = 0;
SELECT * FROM tabbool WHERE col2 is null;
- 上一篇: GBase 8s数据库GSDK错误代码
- 下一篇: 没有了