文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>PostgreSQL: longest_text 聚合函数

PostgreSQL: longest_text 聚合函数

时间:2009-11-12  来源:hellwolf

PostgreSQL支持自建 aggregate function,以下例子创建了一个称为 longest_text的聚合函数,该函数可应用于各种类型数据。


CREATE OR REPLACE FUNCTION longer_text(anyelement, anyelement)
    RETURNS anyelement AS
$$
SELECT a[i] AS element FROM (SELECT ARRAY[$1, $2] AS a) AS foo
    CROSS JOIN generate_series(1, 2) as i
    WHERE a[i] IS NOT NULL
    ORDER BY char_length(a[i]::text) DESC LIMIT 1
$$
    LANGUAGE 'sql' IMMUTABLE;

DROP AGGREGATE IF EXISTS longest_text(anyelement);
CREATE AGGREGATE longest_text(anyelement) (
    SFUNC = longer_text,
    STYPE = anyelement
);


以下代码比较了 max 和 longest_text 的输出:

SELECT max(proname), longest_text(proname) from pg_proc


简单分析:
# longer_text 是一个应用于两个 anyelement 函数

# longest_text 通过将 longer_text 用于每个元素: SFUNC 意思是 state transition function 第一个参数为前状态,第二个参数为当前元素,起始状态默认为 NULL。 STYPE 是最终返回元素类型。

详细参考:
http://www.postgresql.org/docs/8.4/static/sql-createfunction.html
http://www.postgresql.org/docs/8.4/static/sql-createaggregate.html


相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载