Mysql替换为瀚高数据库,部分语法和函数不兼容,整理了部分替换,(注意要在对应的模式下执行)例如:

1、find_in_set函数
sql
create or replace function find_in_set(bigint, varchar)
returns boolean as
$$ declare list text[];
len bigint;
begin
if $2 ='' then
return 0;
end if;
list := pg_catalog.string_to_array($2::text, ',');
len := pg_catalog.array_upper(list, 1);
for i in 1..len loop
if list[i] = $1::text
then
if i>0 then
return true;
else
return false; end if;
end if;
end loop;
return 0;
end;
$$ language plpgsql ;
2、错误:操作符不存在:bigint=character varying

sql
create cast(varchar as bigint) with inout as IMPLICIT;
3、错误:函数curdate()不存在

sql
CREATE OR REPLACE FUNCTION curdate()
RETURNS date AS $$
SELECT CURRENT_DATE::date;
$$ LANGUAGE sql IMMUTABLE;
4、错误:函数to_days(timestamp with time zone)不存在

sql
CREATE OR REPLACE FUNCTION to_days(timestamp with time zone)
RETURNS INTEGER AS $$
SELECT ($1 AT TIME ZONE 'UTC')::date - '0001-01-01 BC'::date;
$$ IMMUTABLE STRICT LANGUAGE SQL;
5、错误:函数date_format(timestamp with time zone,unknown)不存在

sql
CREATE OR REPLACE FUNCTION DATE_FORMAT(
date_str timestamptz,
format_str text
) RETURNS varchar AS $$
DECLARE
ts timestamptz;
pg_format text;
BEGIN
IF date_str IS NULL OR format_str IS NULL THEN
RETURN NULL;
END IF;
BEGIN
ts := date_str;
EXCEPTION WHEN OTHERS THEN
RETURN NULL;
END;
pg_format := format_str;
pg_format := replace(pg_format, '%Y', 'YYYY');
pg_format := replace(pg_format, '%y', 'YY');
pg_format := replace(pg_format, '%m', 'MM');
pg_format := replace(pg_format, '%c', 'MM');
pg_format := replace(pg_format, '%M', 'Month');
pg_format := replace(pg_format, '%b', 'Mon');
pg_format := replace(pg_format, '%d', 'DD');
pg_format := replace(pg_format, '%e', 'D');
pg_format := replace(pg_format, '%H', 'HH24');
pg_format := replace(pg_format, '%h', 'HH12');
pg_format := replace(pg_format, '%k', 'HH24');
pg_format := replace(pg_format, '%I', 'HH12');
pg_format := replace(pg_format, '%i', 'MI');
pg_format := replace(pg_format, '%s', 'SS');
pg_format := replace(pg_format, '%p', 'AM');
pg_format := replace(pg_format, '%W', 'Day');
pg_format := replace(pg_format, '%a', 'Dy');
pg_format := replace(pg_format, '%T', 'HH24:MI:SS');
pg_format := replace(pg_format, '%r', 'HH12:MI:SS AM');
pg_format := replace(pg_format, '%f', 'US');
RETURN to_char(ts, pg_format);
END;
$$ LANGUAGE plpgsql IMMUTABLE;
6、函数date_format(character varying,unknown)不存在

sql
CREATE OR REPLACE FUNCTION date_format(
in_date varchar,
format_str text
) RETURNS varchar AS $$
DECLARE
ts timestamptz;
BEGIN
IF in_date IS NULL OR format_str IS NULL THEN
RETURN NULL;
END IF;
BEGIN
ts := in_date::timestamptz;
EXCEPTION WHEN OTHERS THEN
RETURN NULL;
END;
RETURN DATE_FORMAT(ts, format_str);
END;
$$ LANGUAGE plpgsql IMMUTABLE;
7、函数ifnull(character varying,unknown)不存在
sql
CREATE OR REPLACE FUNCTION ifnull(anyelement, anyelement)
RETURNS anyelement AS $$
BEGIN
RETURN COALESCE($1, $2);
END;
$$ LANGUAGE plpgsql IMMUTABLE;
CREATE OR REPLACE FUNCTION ifnull(anyelement, text)
RETURNS anyelement AS $$
BEGIN
RETURN COALESCE($1, $2::anyelement);
END;
$$ LANGUAGE plpgsql IMMUTABLE;
8、函数date_add(character varying,interval)不存在

sql
CREATE OR REPLACE FUNCTION date_add(
start_dt varchar,
intv interval
) RETURNS timestamp AS $$
BEGIN
RETURN date_add(start_dt::timestamp with time zone,intv);
END;
$$ LANGUAGE plpgsql;
注意:上述这些只需要在瀚高数据库建立相应的函数就可以,不需要改变Mysql的语法。建立之后之前的语法也会被适用