pg学习_函数类型

本文详细介绍了数据库中的函数类型,包括单行函数如数值型函数、字符串函数、时间日期函数及格式化函数,以及多行函数如求平均值、总和、最小值、最大值和统计记录数等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

函数类型


函数的类型可以分为两种:单行函数和多行函数


1、单行函数


1.1 数值型函数
常用的数值型函数有: 
Round() 按指定精度对十进制数四舍五入  
Sin() 求正弦三角函数 
Cos() 求余弦三角函数 
Abs() 求绝对值函数 
Sqrt() 求平方根函数 
mod() 求除法余数 
power() 求幂函数 
floor() 求小于等于某数的最大整数 
ceil() 求大于等于某数的最小整数 
Trunc() 向零的方向截断浮点数 
highgo=# select round(45.923,2),round(45.923,0),round(45.923,-1);
 round | round | round 
-------+-------+-------
 45.92 |    46 |    50
(1 row)


1.2字符串函数
#小写转换函数: 
LOWER :将字符串中大写转换成小写 
UPPER :将字符串中小写转换成大写 
INITCAP :将单词中首个字母转换成大写 
highgo=# select id,initcap(name) from test1;
 id | initcap 
----+---------
  1 | Adam
  2 | Lilith
(2 rows)
#字符操作函数 
SUBSTR() : 取字符串
LENGTH() : 求字符串的长度 
LPAD() : 左补指定的长度 
RPAD() : 右补指定的长度 
REPLACE() : 替换字符串 
TRIM():从左边或者右边删除指定字符串 
highgo=# select substr('asdfg',2,3);
 substr 
--------
 sdf
(1 row)
highgo=# select length('asdfg');
 length 
--------
      5
(1 row)
highgo=# select position('w' in 'qwert');
 position 
----------
        2
(1 row)
highgo=# select lpad('asdf',10,'*');
    lpad    
------------
 ******asdf
(1 row)
highgo=# select rpad('asdf',10,'*');
    rpad    
------------
 asdf******
(1 row)
highgo=# select replace('asdfg asdfg','d','w');
   replace   
-------------
 aswfg aswfg
(1 row)
highgo=# select trim('ha' from 'hasdfg');
 btrim 
-------
 sdfg
(1 row)


1.3时间日期函数
Abstime()取当前的时间
注意:该函数与 oracle 中 sysdate 函数对应。Oracle 里面的用法:select sysdate from dual ;
highgo=# select abstime(timestamp 'now');
        abstime         
------------------------
 2017-04-01 08:28:29+08
(1 row)


1.4格式化函数 
格式化函数提供一套有效的工具用于把各种数据类型(日期/时间,int,float,numeric) 转换成格式化的字符串以及反过来从格式化的字符串转换成原始的数据类型。 To_char()将时间 int float numeic 其中的之一的转换成字符串 
To_date()将字符串转换成日期 
To_number()将字符串转换成numeric 类型的实数。 
highgo=# select abstime(timestamp 'now');
        abstime         
------------------------
 2017-04-01 08:28:29+08
(1 row)
highgo=# select to_char(234,'999'); 
 to_char 
---------
  234
(1 row)
highgo=#  select to_date('05 dec 2011','dd mon yyyy'); 
  to_date   
------------
 2011-12-05
(1 row)
highgo=#  select to_number('12,454.8$','99G999D9S'); 
 to_number 
-----------
   12454.8
(1 row)


2、多行函数
多行函数有: 
AVG()   求平均值 
SUM()   求总和 
MIN()   求最小值 
MAX()   求最大值 
COUNT() 统计总记录数 

<think>好的,用户想了解PostgreSQL数据库函数的使用教程。首先,我需要整理PostgreSQL函数的基本概念和分类。根据引用内容,函数可以分为基于SQL和PL/PGSQL的,还有服务器编程相关的支撑语言函数,以及兼容其他数据库的函数。 接下来,应该从基础开始,比如如何创建函数,使用SQL和PL/pgSQL的区别。引用1提到PL/PGSQL适合复杂逻辑,可能需要举例说明两者的不同。然后需要覆盖常用函数类型,比如字符串、时间、JSON处理,引用2里有提到这些,所以应该详细说明每个类别下的常见函数,并给出示例。 用户可能对实际应用场景感兴趣,所以需要结合引用中的内容,比如数据清洗、业务逻辑封装等。引用3提到数据完整性、并发性能等,可以联系函数在保证数据一致性和提升性能方面的作用。 还要注意格式要求,行内公式用$...$,独立公式用$$...$$,虽然这个回答可能数学公式不多,但如果有涉及比如聚合函数中的计算,可能需要用到。同时,生成相关问题,考虑用户可能的后续疑问,比如性能优化、调试方法、与其他数据库的差异等。 需要检查引用标记是否正确添加,比如在提到PL/PGSQL时引用[^1],在字符串函数部分引用[^2]。最后确保结构清晰,分步骤讲解,从创建函数到实际应用,再到高级特性,帮助用户逐步学习。</think># PostgreSQL数据库函数使用教程 ## 一、函数基础概念 PostgreSQL支持多种函数类型,包括: - 基于SQL的内置函数(如$LENGTH()$, $SUM()$) - 使用PL/pgSQL编写的存储过程 - 服务器编程扩展函数(C语言扩展等)[^1] - 兼容其他数据库的函数(如Oracle的$TO_DATE()$)[^3] ## 二、函数创建与使用 ### 1. SQL函数示例 ```sql -- 计算圆的面积 CREATE FUNCTION circle_area(radius numeric) RETURNS numeric AS $$ SELECT 3.1415926535 * radius^2; $$ LANGUAGE SQL; ``` ### 2. PL/pgSQL函数示例 ```sql -- 带条件判断的函数 CREATE OR REPLACE FUNCTION get_grade(score int) RETURNS text AS $$ BEGIN IF score >= 90 THEN RETURN 'A'; ELSIF score >= 80 THEN RETURN 'B'; ELSE RETURN 'C'; END IF; END; $$ LANGUAGE plpgsql; ``` ## 三、常用函数类型 ### 1. 字符串函数 ```sql SELECT CONCAT('Post','greSQL'), -- 字符串拼接 SUBSTRING('abcdef',2,3), -- 获取子串 LENGTH('中文测试'); -- 字符长度计算 ``` ### 2. 时间函数 ```sql SELECT NOW()::date, -- 当前日期 EXTRACT(YEAR FROM NOW()), -- 提取年份 AGE(NOW(), '2000-01-01'); -- 计算时间差 ``` ### 3. JSON处理函数 ```sql SELECT jsonb_build_object('name', 'Alice', 'age', 25), jsonb_array_elements('[1,2,3]'::jsonb); ``` ## 四、高级应用场景 ### 1. 数据清洗 ```sql CREATE FUNCTION clean_phone(text) RETURNS text AS $$ SELECT regexp_replace($1, '[^0-9]', '', 'g'); $$ LANGUAGE SQL; ``` ### 2. 业务逻辑封装 ```sql CREATE FUNCTION place_order(user_id int, product_ids int[]) RETURNS void AS $$ BEGIN INSERT INTO orders(user_id, order_date) VALUES (user_id, NOW()); INSERT INTO order_items SELECT currval('orders_id_seq'), unnest(product_ids); END; $$ LANGUAGE plpgsql; ``` ## 五、性能优化建议 1. 对常用函数创建表达式索引: ```sql CREATE INDEX idx_lower_name ON users (LOWER(name)); ``` 2. 使用$IMMUTABLE$标记纯函数: ```sql CREATE FUNCTION safe_mult(a int, b int) RETURNS int IMMUTABLE AS $$ SELECT a * b; $$ LANGUAGE SQL; ``` 3. 避免在WHERE条件中使用复杂函数计算
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值