PG数据库实现bool自动转smallint的方式

删除函数:

语法:
DROP FUNCTION IF EXISTS your_schema_name.function_name(arg_type1, arg_type2) CASCADE RESTRICT;

实例:
DROP FUNCTION IF EXISTS platformyw.boolean_to_smallint(bool) CASCADE RESTRICT;

查询是否存在函数

语法:
SELECT * FROM information_schema.routines WHERE routine_catalog={you_catalog_name} and routine_schema={you_schema_name} and routine_name ={you_func_name} and routine_type = 'FUNCTION';

实例:
SELECT * FROM information_schema.routines WHERE routine_catalog='gisqdb' and routine_schema='platform'
and routine_name ='boolean_to_smallint'  and routine_type = 'FUNCTION';

 创建转化函数

CREATE OR REPLACE FUNCTION boolean_to_smallint(b boolean) RETURNS smallint AS $$
    BEGIN
            RETURN (b::boolean)::bool::int;
    END;
$$LANGUAGE plpgsql;
drop cast if exists (boolean as smallint);

创建一个全局类型转化

具体地说,如果布尔值为 TRUE,则转换为 1;如果布尔值为 FALSE,则转换为 0

例如,CAST (TRUE AS smallint) 将返回 1CAST (FALSE AS smallint) 将返回 0

语法:
CREATE CAST (source_type AS target_type) WITH FUNCTION function_name(argument_type) [ AS ASSIGNMENT | AS IMPLICIT ];

其中:
source_type 是要转换的源类型,target_type 是要转换的目标类型,function_name 是执行转换的函数,argument_type 是函数的参数类型。AS ASSIGNMENT 和 AS IMPLICIT 用于指定转换类型的方式。AS ASSIGNMENT 表示将转换定义为显式转换,需要显式地使用 CAST 运算符进行转换;AS IMPLICIT 表示将转换定义为隐式转换,可以在不使用 CAST 运算符的情况下自动进行转换

实例:

CREATE CAST (boolean AS smallint) WITH FUNCTION boolean_to_smallint(boolean) AS implicit;

查询转化是否存在

布尔值为 TRUE,则转换为 1;如果布尔值为 FALSE,则转换为 0

SELECT 1    FROM pg_cast c  JOIN pg_type t1 ON c.castsource = t1.oid  JOIN pg_type t2 ON c.casttarget = t2.oid
WHERE t1.typname = 'boolean'    AND t2.typname = 'smallint'; 

删除转化

drop cast if exists (boolean as smallint); 

查询pg版本号

select version(); 

猜你喜欢

转载自blog.csdn.net/qq_38423256/article/details/130369545