瀚高数据库类型转换报错解决方案

📅 2026/8/13 21:57:33
瀚高数据库类型转换报错解决方案
一、character varying-integer报错解决方案创建character varying integer的操作符CREATE OR REPLACE FUNCTION wpfs.compare_varchar_int(leftarg varchar, rightarg integer) RETURNS boolean AS $$ BEGIN RETURN leftarg::integer rightarg; END; $$ LANGUAGE plpgsql; CREATE OPERATOR wpfs. ( LEFTARG character varying, RIGHTARG integer, PROCEDURE wpfs.compare_varchar_int );二、character varying-character varying报错Hibernate: SELECT COUNT(FILE_TYPE) AS filecount, FILE_TYPE AS filetype FROM file_run_state WHERE UPLOAD_DATE TO_DATE(?, YYYY-MM-DD) AND FILE_STATE SUCCESS AND UPLOAD_DATE TO_DATE(?, YYYY-MM-DD) AND STATION_ID ? AND SCHEDULE_TYPE ? GROUP BY FILE_TYPE2026-01-07 08:25:20 499 | [31mWARN [0;39m | [1;32morg.hibernate.engine.jdbc.spi.SqlExceptionHelper[0;39m | SQL Error: 0, SQLState: 22P022026-01-07 08:25:20 499 | [1;31mERROR[0;39m | [1;32morg.hibernate.engine.jdbc.spi.SqlExceptionHelper[0;39m | 错误: 无效的类型 integer 输入语法: SUCCESS位置144查看操作符有一个charater varying转integer的号操作符解决方案创建character varying character varying的操作符CREATE OR REPLACE FUNCTION wpfs.varchar_eq_varchar( leftarg character varying, rightarg character varying ) RETURNS boolean AS $$ BEGIN -- 使用基础比较避免递归 IF leftarg IS NULL AND rightarg IS NULL THEN RETURN true; ELSIF leftarg IS NULL OR rightarg IS NULL THEN RETURN false; ELSE -- 使用系统内置的文本比较 RETURN leftarg::text rightarg::text; END IF; END; $$ LANGUAGE plpgsql IMMUTABLE STRICT; CREATE OPERATOR wpfs. ( LEFTARG character varying, RIGHTARG character varying, PROCEDURE wpfs.varchar_eq_varchar );三、boolean - smallint报错解决方案CREATE OR REPLACE FUNCTION boolean_to_smallint(boolean) RETURNS smallint AS $$ BEGIN RETURN CASE WHEN $1 THEN 1::smallint ELSE 0::smallint END; END; $$ LANGUAGE plpgsql IMMUTABLE STRICT; CREATE CAST (boolean AS smallint) WITH FUNCTION boolean_to_smallint(boolean) AS IMPLICIT;四、character integerCREATE OR REPLACE FUNCTION public.ne_char_int(character varying, integer) RETURNS boolean LANGUAGE sql IMMUTABLE AS $f$ SELECT $1 IS DISTINCT FROM $2::character varying; $f$; CREATE OPERATOR public. ( LEFTARG character varying, RIGHTARG integer, PROCEDURE public.ne_char_int );五、bit(1) booleanCREATE OR REPLACE FUNCTION bool_to_bit(boolean) RETURNS bit(1) AS $$ SELECT CASE WHEN $1 THEN B1 ELSE B0 END; $$ LANGUAGE sql IMMUTABLE; CREATE CAST (boolean AS bit(1)) WITH FUNCTION bool_to_bit(boolean) AS IMPLICIT;