任何用于 postgresql 中的 Oracle 函数的 Polyfills / Shim
Any Polyfills / Shim for Oracle functions to be used in postgresql
有一个 java jar file/external 库没有源...它通过 jdbc 和它进行的一些 sql 查询连接到数据库引擎是 ...TRUNC(date_column,'Q')...
、...TRUNC(date_column,'DD')...
和 ...TRUNC(date_column,'MM')...
,但是 postgresql db Trunc()
方法只处理数字数据,截断日期的确切函数是 date_trunc()
。 ..
Trunc()
和 date_trunc()
的参数顺序也发生了变化
那么是否有一个 postgresql 自定义函数可以重载现有的 trunc()
函数并处理所有格式化程序 'DD'、'MM'、'Q'等等(other formatters reference)...?
我可以尝试从头开始编写一个新函数...但这似乎是在重新发明轮子...我可以使用任何可重用的 polyfill sql pack/file?
到目前为止,我已经想出了这个:
CREATE OR REPLACE FUNCTION trunc(dtval timestamp with time zone, formatter text) returns timestamp with time zone AS $body$
BEGIN
RETURN date_trunc((CASE
WHEN formatter IN ('MI') THEN 'minute'
WHEN formatter IN ('HH','HH12','HH24') THEN 'hour'
WHEN formatter IN ('DAY','DY','D') THEN 'day'
WHEN formatter IN ('DDD','DD','J') THEN 'day'
WHEN formatter IN ('W') THEN 'week'
WHEN formatter IN ('IW') THEN 'week'
WHEN formatter IN ('WW') THEN 'week'
WHEN formatter IN ('MONTH','MON','MM','RM') THEN 'month'
WHEN formatter IN ('Q') THEN 'quarter'
WHEN formatter IN ('IYYY','IY','IY','I') THEN 'year'
WHEN formatter IN ('SYYYY','YYYY','YEAR','SYEAR','YYY','YY','Y') THEN 'year'
WHEN formatter IN ('CC','SCC') THEN 'year'
ELSE 'day'
END),dtval);
END;
$body$
LANGUAGE PLPGSQL
SECURITY DEFINER
STABLE;
我走的路对吗?
你看过 github.com/orafce/orafce 了吗?
有一个 java jar file/external 库没有源...它通过 jdbc 和它进行的一些 sql 查询连接到数据库引擎是 ...TRUNC(date_column,'Q')...
、...TRUNC(date_column,'DD')...
和 ...TRUNC(date_column,'MM')...
,但是 postgresql db Trunc()
方法只处理数字数据,截断日期的确切函数是 date_trunc()
。 ..
Trunc()
和 date_trunc()
那么是否有一个 postgresql 自定义函数可以重载现有的 trunc()
函数并处理所有格式化程序 'DD'、'MM'、'Q'等等(other formatters reference)...?
我可以尝试从头开始编写一个新函数...但这似乎是在重新发明轮子...我可以使用任何可重用的 polyfill sql pack/file?
到目前为止,我已经想出了这个:
CREATE OR REPLACE FUNCTION trunc(dtval timestamp with time zone, formatter text) returns timestamp with time zone AS $body$
BEGIN
RETURN date_trunc((CASE
WHEN formatter IN ('MI') THEN 'minute'
WHEN formatter IN ('HH','HH12','HH24') THEN 'hour'
WHEN formatter IN ('DAY','DY','D') THEN 'day'
WHEN formatter IN ('DDD','DD','J') THEN 'day'
WHEN formatter IN ('W') THEN 'week'
WHEN formatter IN ('IW') THEN 'week'
WHEN formatter IN ('WW') THEN 'week'
WHEN formatter IN ('MONTH','MON','MM','RM') THEN 'month'
WHEN formatter IN ('Q') THEN 'quarter'
WHEN formatter IN ('IYYY','IY','IY','I') THEN 'year'
WHEN formatter IN ('SYYYY','YYYY','YEAR','SYEAR','YYY','YY','Y') THEN 'year'
WHEN formatter IN ('CC','SCC') THEN 'year'
ELSE 'day'
END),dtval);
END;
$body$
LANGUAGE PLPGSQL
SECURITY DEFINER
STABLE;
我走的路对吗?
你看过 github.com/orafce/orafce 了吗?