Postgresql常用函数操作
目录
一、字符串函数
二、数学函数
三、日期和时间函数
四、条件表达式函数
五、类型转换函数
六、聚合函数 (常与 GROUP BY 一起使用)
重要提示
PostgreSQL 提供了极其丰富的内置函数,用于操作和处理数据。以下是一些最常用的函数分类和示例:
一、字符串函数
-
CONCAT(str1, str2, ...)
/str1 || str2 || ...
- 功能: 连接字符串。
- 示例:
SELECT CONCAT('Hello', ' ', 'World');
或SELECT 'Hello' || ' ' || 'World';
->'Hello World'
-
LENGTH(str)
/CHAR_LENGTH(str)
- 功能: 返回字符串的字符数。
- 示例:
SELECT LENGTH('PostgreSQL');
->10
-
UPPER(str)
- 功能: 将字符串转换为大写。
- 示例:
SELECT UPPER('hello');
->'HELLO'
-
LOWER(str)
- 功能: 将字符串转换为小写。
- 示例:
SELECT LOWER('SQL');
->'sql'
-
TRIM([LEADING | TRAILING | BOTH] [characters] FROM str)
- 功能: 从字符串开头(
LEADING
)、结尾(TRAILING
)或两端(BOTH
,默认)移除指定的字符(默认为空格)。 - 示例:
SELECT TRIM(' space ');
->'space'
SELECT TRIM(LEADING '0' FROM '000123');
->'123'
SELECT TRIM(BOTH 'x' FROM 'xxSQLxx');
->'SQL'
- 功能: 从字符串开头(
-
SUBSTRING(str FROM start [FOR length])
/SUBSTR(str, start [, length])
- 功能: 从字符串中提取子串。
start
是起始位置(从1开始),length
是要提取的长度(可选)。 - 示例:
SELECT SUBSTRING('PostgreSQL' FROM 6 FOR 3);
->'gre'
SELECT SUBSTR('Database', 3, 4);
->'taba'
(注意:SUBSTR
的start
位置行为在某些版本/设置下可能不同,推荐用SUBSTRING
)
- 功能: 从字符串中提取子串。
-
REPLACE(str, from_str, to_str)
- 功能: 将字符串中出现的所有
from_str
替换为to_str
。 - 示例:
SELECT REPLACE('foo bar baz', 'bar', 'qux');
->'foo qux baz'
- 功能: 将字符串中出现的所有
-
SPLIT_PART(str, delimiter, field_num)
- 功能: 根据分隔符拆分字符串,并返回指定字段编号的部分(从1开始)。
- 示例:
SELECT SPLIT_PART('john.doe@example.com', '.', 2);
->'doe@example'
(取第二个点之前的部分)
-
POSITION(substring IN str)
- 功能: 返回子串在字符串中第一次出现的位置(从1开始),找不到则返回0。
- 示例:
SELECT POSITION('SQL' IN 'PostgreSQL');
->8
-
LEFT(str, n)
/RIGHT(str, n)
- 功能: 返回字符串左边/右边的
n
个字符。 - 示例:
SELECT LEFT('PostgreSQL', 4);
->'Post'
,SELECT RIGHT('PostgreSQL', 3);
->'SQL'
- 功能: 返回字符串左边/右边的
二、数学函数
-
ROUND(value [, precision])
- 功能: 将数值四舍五入到指定的小数位数(
precision
,默认为0)。 - 示例:
SELECT ROUND(123.4567, 2);
->123.46
,SELECT ROUND(123.4567);
->123
- 功能: 将数值四舍五入到指定的小数位数(
-
CEIL(value)
/CEILING(value)
- 功能: 返回大于或等于参数的最小整数(向上取整)。
- 示例:
SELECT CEIL(123.45);
->124
,SELECT CEIL(-123.45);
->-123
-
FLOOR(value)
- 功能: 返回小于或等于参数的最大整数(向下取整)。
- 示例:
SELECT FLOOR(123.45);
->123
,SELECT FLOOR(-123.45);
->-124
-
ABS(value)
- 功能: 返回数值的绝对值。
- 示例:
SELECT ABS(-15);
->15
-
POWER(base, exponent)
- 功能: 返回
base
的exponent
次幂。 - 示例:
SELECT POWER(2, 3);
->8
- 功能: 返回
-
SQRT(value)
- 功能: 返回数值的平方根。
- 示例:
SELECT SQRT(9);
->3
-
MOD(dividend, divisor)
- 功能: 返回
dividend
除以divisor
的余数(模运算)。 - 示例:
SELECT MOD(10, 3);
->1
- 功能: 返回
-
RANDOM()
- 功能: 返回一个范围在
[0.0, 1.0)
的随机浮点数。 - 示例:
SELECT RANDOM();
->0.123456789...
(每次不同)
- 功能: 返回一个范围在
-
PI()
- 功能: 返回圆周率 π 的值。
- 示例:
SELECT PI();
->3.141592653589793
-
三角函数 (
SIN
,COS
,TAN
,ASIN
,ACOS
,ATAN
,ATAN2
)- 功能: 执行标准的三角函数计算(参数通常为弧度)。
- 示例:
SELECT SIN(PI()/2);
->1.0
三、日期和时间函数
-
CURRENT_DATE
- 功能: 返回当前日期(不含时间)。
- 示例:
SELECT CURRENT_DATE;
->2023-10-27
(取决于执行日期)
-
CURRENT_TIME
/CURRENT_TIME(precision)
- 功能: 返回当前时间(不含日期),可指定精度。
- 示例:
SELECT CURRENT_TIME;
->14:30:15.123456+08
(取决于执行时间和时区)
-
CURRENT_TIMESTAMP
/CURRENT_TIMESTAMP(precision)
/NOW()
- 功能: 返回当前日期和时间(带时区),可指定精度。
NOW()
是CURRENT_TIMESTAMP
的同义词。 - 示例:
SELECT CURRENT_TIMESTAMP;
->2023-10-27 14:30:15.123456+08
- 功能: 返回当前日期和时间(带时区),可指定精度。
-
EXTRACT(field FROM source)
- 功能: 从日期/时间/时间间隔值中提取指定的部分(年、月、日、小时、分钟、秒等)。
- 示例:
SELECT EXTRACT(YEAR FROM CURRENT_DATE);
->2023
SELECT EXTRACT(MONTH FROM TIMESTAMP '2023-10-27 15:00:00');
->10
SELECT EXTRACT(DAY FROM CURRENT_DATE);
->27
SELECT EXTRACT(HOUR FROM CURRENT_TIME);
->14
(取决于当前时间)
-
DATE_PART('field', source)
- 功能: 功能与
EXTRACT
完全相同,是 PostgreSQL 的历史函数形式。推荐使用标准的EXTRACT
。 - 示例:
SELECT DATE_PART('dow', CURRENT_DATE);
->5
(返回星期几,0=周日, 1=周一, …, 6=周六)
- 功能: 功能与
-
AGE([timestamp1, ] timestamp2)
- 功能: 当只有一个参数时,计算该时间戳到当前日期的间隔。当有两个参数时,计算
timestamp1
到timestamp2
的间隔。 - 示例:
SELECT AGE(TIMESTAMP '1990-01-01');
->33 years 9 mons 26 days
(假设当前是2023-10-27)SELECT AGE(TIMESTAMP '2023-01-15', TIMESTAMP '2023-10-27');
->9 mons 12 days
- 功能: 当只有一个参数时,计算该时间戳到当前日期的间隔。当有两个参数时,计算
-
DATE_TRUNC('precision', source)
- 功能: 将日期/时间值截断到指定的精度(年、季度、月、周、日、小时等),返回该精度的开始时刻。
- 示例:
SELECT DATE_TRUNC('month', TIMESTAMP '2023-10-27 14:30:15');
->2023-10-01 00:00:00
SELECT DATE_TRUNC('hour', CURRENT_TIMESTAMP);
->2023-10-27 14:00:00+08
(取决于当前时间)
-
TO_CHAR(timestamp, format)
- 功能: 将时间戳格式化为指定模式的字符串。
- 示例:
SELECT TO_CHAR(CURRENT_TIMESTAMP, 'YYYY-MM-DD HH24:MI:SS');
->'2023-10-27 14:30:15'
(取决于当前时间) - 常用格式模板:
YYYY
(4位年),MM
(月),DD
(日),HH24
(24小时制小时),MI
(分),SS
(秒),DY
(星期缩写),Day
(星期全称),Mon
(月份缩写),Month
(月份全称)。
-
INTERVAL 'string'
- 功能: 构造一个时间间隔值。
- 示例:
SELECT CURRENT_TIMESTAMP + INTERVAL '1 day 2 hours';
(一天两小时之后)SELECT CURRENT_DATE - INTERVAL '1 week';
(一周之前)
四、条件表达式函数
-
COALESCE(value1, value2, ..., valuen)
- 功能: 返回参数列表中第一个非
NULL
的值。常用于处理可能为NULL
的字段并提供默认值。 - 示例:
SELECT COALESCE(description, 'No description provided') FROM products;
(如果description
是NULL
,则返回'No description provided'
)
- 功能: 返回参数列表中第一个非
-
NULLIF(value1, value2)
- 功能: 如果
value1
等于value2
,则返回NULL
;否则返回value1
。常用于避免除零错误或特定比较。 - 示例:
SELECT NULLIF(0, 0);
->NULL
SELECT 100 / NULLIF(column_value, 0);
(避免除零错误)
- 功能: 如果
-
GREATEST(value1, value2, ...)
- 功能: 返回参数列表中的最大值。
- 示例:
SELECT GREATEST(10, 5, 20, 15);
->20
-
LEAST(value1, value2, ...)
- 功能: 返回参数列表中的最小值。
- 示例:
SELECT LEAST(10, 5, 20, 15);
->5
-
CASE ... WHEN ... THEN ... [ELSE ...] END
- 功能: 强大的条件分支表达式。有两种形式:
- 简单
CASE
:CASE expression WHEN value1 THEN result1 WHEN value2 THEN result2 ... [ELSE else_result] END
- 搜索
CASE
:CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 ... [ELSE else_result] END
- 简单
- 示例:
SELECT CASE status WHEN 1 THEN 'Active' WHEN 0 THEN 'Inactive' ELSE 'Unknown' END FROM users;
SELECT CASE WHEN score >= 90 THEN 'A' WHEN score >= 80 THEN 'B' WHEN score >= 70 THEN 'C' ELSE 'F' END FROM grades;
- 功能: 强大的条件分支表达式。有两种形式:
五、类型转换函数
-
CAST(value AS type)
- 功能: 标准的类型转换运算符。
- 示例:
SELECT CAST('123' AS INTEGER);
->123
SELECT CAST(CURRENT_TIMESTAMP AS DATE);
->2023-10-27
(截断时间部分)
-
value::type
- 功能: PostgreSQL 特有的类型转换简写(功能等同于
CAST
)。 - 示例:
SELECT '123'::INTEGER;
->123
SELECT '2023-10-27'::DATE;
->2023-10-27
- 功能: PostgreSQL 特有的类型转换简写(功能等同于
-
TO_DATE(text, format)
- 功能: 根据指定格式将字符串转换为日期。
- 示例:
SELECT TO_DATE('27/10/2023', 'DD/MM/YYYY');
->2023-10-27
-
TO_TIMESTAMP(text, format)
- 功能: 根据指定格式将字符串转换为带时区的时间戳。
- 示例:
SELECT TO_TIMESTAMP('27-10-2023 14:30:00', 'DD-MM-YYYY HH24:MI:SS');
->2023-10-27 14:30:00+00
(时区取决于设置)
六、聚合函数 (常与 GROUP BY
一起使用)
-
COUNT(*)
/COUNT(expression)
- 功能: 计算行数(
COUNT(*)
)或非NULL
值的行数(COUNT(expression)
)。 - 示例:
SELECT COUNT(*) FROM orders;
(总订单数),SELECT COUNT(customer_id) FROM orders;
(有客户的订单数 -customer_id
非NULL
的行数)
- 功能: 计算行数(
-
SUM(expression)
- 功能: 计算数值表达式在所有行中的总和。
- 示例:
SELECT SUM(amount) FROM payments;
(总支付金额)
-
AVG(expression)
- 功能: 计算数值表达式在所有行中的平均值。
- 示例:
SELECT AVG(price) FROM products;
(平均价格)
-
MIN(expression)
- 功能: 返回表达式在所有行中的最小值。
- 示例:
SELECT MIN(created_at) FROM events;
(最早的事件时间)
-
MAX(expression)
- 功能: 返回表达式在所有行中的最大值。
- 示例:
SELECT MAX(price) FROM products;
(最高价格)
-
STRING_AGG(expression, delimiter [ORDER BY ...])
- 功能: 将分组内非
NULL
的expression
值用指定的delimiter
连接成一个字符串。可选的ORDER BY
指定连接顺序。 - 示例:
SELECT department_id, STRING_AGG(employee_name, ', ' ORDER BY hire_date) FROM employees GROUP BY department_id;
(列出每个部门的员工名字,按入职日期排序,逗号分隔)
- 功能: 将分组内非
重要提示
- 官方文档是你的朋友: 这是最权威、最全面的参考。搜索 “PostgreSQL [函数名]” 通常能找到官方文档链接。
- 函数重载: 很多函数名相同但参数类型不同(如
ROUND
处理numeric
和double precision
)。 - 时区: 处理时间戳时要特别注意时区设置 (
timezone
配置参数)。 - NULL 处理: 理解函数如何处理
NULL
输入非常重要(如COUNT(*)
与COUNT(column)
的区别,SUM
忽略NULL
)。 - 正则表达式: PostgreSQL 有强大的正则表达式支持(
~
,!~
,~*
,!~*
,REGEXP_MATCH
,REGEXP_REPLACE
,REGEXP_SPLIT_TO_ARRAY
,REGEXP_SPLIT_TO_TABLE
),非常适用于复杂字符串处理。
这份列表涵盖了最常用的核心函数。实际应用中,根据具体需求查阅官方文档是最高效的方法。
这篇博客到这里就接近尾声了,希望我的分享能给您带来一些启发和帮助,别忘了点赞、收藏。您的每一次互动、鼓励是我持续创作的动力!期待与您再次相遇,共同探索更广阔的世界!
相关文章:
Postgresql常用函数操作
目录 一、字符串函数 二、数学函数 三、日期和时间函数 四、条件表达式函数 五、类型转换函数 六、聚合函数 (常与 GROUP BY 一起使用) 重要提示 PostgreSQL 提供了极其丰富的内置函数,用于操作和处理数据。以下是一些最常用的函数分类和示例: 一…...
用 NGINX 搭建高效 IMAP 代理`ngx_mail_imap_module`
一、模块定位与作用 协议代理 ngx_mail_imap_module 使 NGINX 能在 IMAP 层面充当反向代理,客户端与后端 IMAP 服务器之间的会话流量均由 NGINX 接收并转发。认证控制 通过 imap_auth 指定允许的身份验证方式(如 PLAIN、LOGIN、CRAM-MD5、EXTERNAL&…...

湖北理元理律所债务优化实践:法律技术与人文关怀的双轨服务
一、债务优化的法律逻辑与生活平衡 在债务重组领域,专业机构需同时解决两个核心问题: 法律合规性:依据《民法典》第680条、第671条,对高息债务进行合法性审查; 生活可持续性:根据债务人收入设计分期方案…...

Springboot——整合websocket并根据type区别处理
文章目录 前言架构思想项目结构代码实现依赖引入自定义注解定义具体的处理类定义 TypeAWebSocketHandler定义 TypeBWebSocketHandler 定义路由处理类配置类,绑定point制定前端页面编写测试接口方便跳转进入前端页面 测试验证结语 前言 之前写过一篇类似的博客&…...

Qiskit:量子计算模拟器
参考文献: IBM Qiskit 官网Qiskit DocumentationQiskit Benchpress packageQiskit Algorithms package量子计算:基本概念常见的几类矩阵(正交矩阵、酉矩阵、正规矩阵等)Qiskit 安装指南-博客园使用Python实现量子电路模拟&#x…...

龙虎榜——20250605
上证指数放量收阳线,个股涨跌基本持平,日线持续上涨。 深证指数放量收阳线,日线持续上涨。 2025年6月5日龙虎榜行业方向分析 1. 通信设备 代表标的:生益电子、三维通信、瑞可达 驱动逻辑:5.5G商用牌照发放预期加速&…...
PDF 转 HTML5 —— HTML5 填充图形不支持 Even-Odd 奇偶规则?(第二部分)
这是关于该主题的第二部分。如果你还没有阅读第一部分,请先阅读,以便理解“绕组规则”的问题。 快速回顾一下:HTML5 只支持 Non-Zero(非零)绕组规则,而 PDF 同时支持 Non-Zero 和 Even-Odd(奇偶…...
大数据离线同步工具 DataX 深度实践与 DataX Web 可视化指南
一、引言 在大数据领域,异构数据源间的数据同步是核心需求之一。传统工具如 Sqoop 基于磁盘 IO 的 MR 架构在性能上存在瓶颈,而DataX作为阿里巴巴开源的离线数据同步工具,凭借内存级数据传输和分布式并行处理能力,成为国内大数据…...
记一个判决书查询API接口的开发文档
一、引言 在企业风控、背景调查、尽职调查等场景中,判决书查询是一个非常重要的环节。通过判决书查询,可以了解个人或企业的司法涉诉情况,为风险评估提供数据支持。本文将详细介绍如何开发和使用一个司法涉诉查询API接口,包括客户…...

残月个人拟态主页
TwoMicry个人主页 残月个人拟态主页 原项目作者:KAI GE 在此基础上进行二次修改 精简重构一下 项目简介: 一个精美的拟态风格个人主页,采用现代化的玻璃拟态设计和丰富的动画效果 主要特色: 视觉效果: – 玻璃…...

热门消息中间件汇总
文章目录 前言RabbitMQ基本介绍核心特性适用场景 Kafka基本介绍核心特性适用场景 RocketMQ基本介绍核心特性适用场景 NATS基本介绍核心特性适用场景 总结选型建议与未来趋势选型建议未来趋势 结语 前言 大家后,我是沛哥儿。作为技术领域的老湿机,在消息…...

AiPy实战:10分钟用AI造了个音乐游戏!
“在探索AI编程边界时,我尝试了一个实验:能否让自然语言指令直接生成可交互的音乐学习应用?作为新一代智能编程协作框架,AiPy展示了对开发意图的深度理解能力——当输入创建钢琴学习游戏,包含动态难度关卡和即时反馈系…...
Python Rio 【图像处理】库简介
边写代码零食不停口 盼盼麦香鸡味块 、卡乐比(Calbee)薯条三兄弟 独立小包、好时kisses多口味巧克力糖、老金磨方【黑金系列】黑芝麻丸 边写代码边贴面膜 事业美丽两不误 DR. YS 野森博士【AOUFSE/澳芙雪特证】377专研美白淡斑面膜组合 优惠劵 别光顾写…...

贪心算法应用:分数背包问题详解
贪心算法与分数背包问题 贪心算法(Greedy Algorithm)是算法设计中一种重要的思想,它在许多经典问题中展现出独特的优势。本文将用2万字篇幅,深入剖析贪心算法在分数背包问题中的应用,从基础原理到Java实现细节&#x…...

PHP舆情监控分析系统(9个平台)
PHP舆情监控分析系统(9个平台) 项目简介 基于多平台热点API接口的PHP实时舆情监控分析系统,无需数据库,直接调用API实时获取各大平台热点新闻,支持数据采集、搜索和可视化展示。 功能特性 🔄 实时监控 …...

金孚媒重磅推出德国顶级媒体原生广告整合服务,覆盖12家主流媒体
2025年6月1日,为助力中国企业高效开拓德语市场,全球媒体资源直采和新闻分发平台金孚媒Kinfoome Presswire今日正式推出德国大媒体原生广告套餐。该套餐整合德国最具影响力的12家新闻门户资源,以高曝光、强信任度的原生广告形式,为…...

Mnist手写数字
运行实现: import torch from torch.utils.data import DataLoader from torchvision import transforms from torchvision.datasets import MNIST import matplotlib.pyplot as pltclass Net(torch.nn.Module):#net类神经网络主体def __init__(self):#4个全链接层…...

《一生一芯》数字实验三:加法器与ALU
1. 实验目标 设计一个能实现如下功能的4位带符号位的 补码 ALU: Table 4 ALU 功能列表 功能选择 功能 操作 000 加法 AB 001 减法 A-B 010 取反 Not A 011 与 A and B 100 或 A or B 101 异或 A xor B 110 比较大小 If A<B then out1…...
Go 语言并发编程基础:Goroutine 的创建与调度
Go 语言的并发模型是其最显著的语言特性之一。Goroutine 是 Go 实现并发的核心机制,它比线程更轻量,调度效率极高。 本章将带你了解 Goroutine 的基本概念、创建方式以及背后的调度机制。 一、什么是 Goroutine? Goroutine 是由 Go 运行时&a…...

三甲医院“AI平台+专家系统”双轮驱动模式的最新编程方向分析
医疗人工智能领域正在经历从“单点技术应用”到“系统性赋能”的深刻转型。在这一转型过程中,国内领先的三甲医院通过探索“AI平台+专家系统”双轮驱动模式,不仅解决了医疗AI落地“最后一公里”的难题,更推动了医疗服务质量与效率的全面提升。本文从技术架构、编程方向、落地…...

第12期_网站搭建_几时网络验证1.3二改源码包2024 软件卡密系统 虚拟主机搭建笔记
我用夸克网盘分享了「第12期_网站搭建_几时网络验证1.3二改源码包2024.7z」,点击链接即可保存。打开「夸克APP」,无需下载在线播放视频,畅享原画5倍速,支持电视投屏。 链接:https://pan.quark.cn/s/fe8e7786bd6d...

[论文阅读] (38)基于大模型的威胁情报分析与知识图谱构建论文总结(读书笔记)
《娜璋带你读论文》系列主要是督促自己阅读优秀论文及听取学术讲座,并分享给大家,希望您喜欢。由于作者的英文水平和学术能力不高,需要不断提升,所以还请大家批评指正,非常欢迎大家给我留言评论,学术路上期…...
SpringBoot EhCache 缓存
一、EhCache核心原理 层级存储 堆内缓存(Heap):高速访问,受JVM内存限制堆外缓存(Off-Heap):突破JVM堆大小限制(直接内存)磁盘存储(Disk)ÿ…...
flutter 中Stack 使用clipBehavior: Clip.none, 超出的部分无法响应所有事件
原因 在 Flutter 中,当 Stack 使用 clipBehavior: Clip.none 时,子 Widget 可以超出 Stack 的边界,但默认情况下,超出部分无法响应触摸事件(如点击、拖动等)。这是因为 Flutter 的 HitTest 机制默认会裁剪…...

回溯算法复习(1)
1.回溯的定义(ai) 回溯(Backtracking) 是一种通过搜索所有可能的解空间来求解问题的算法思想,属于试探性求解方法。其核心是在搜索过程中逐步构建解,并在发现当前路径无法得到有效解时,主动回退…...
瀚文机械键盘固件开发详解:HWKeyboard.h文件解析与应用
【手把手教程】从零开始的机械键盘固件开发:HWKeyboard.h详解 前言 大家好,我是键盘DIY爱好者Despacito0o!今天想和大家分享我开发的机械键盘固件核心头文件HWKeyboard.h的设计思路和技术要点。这个项目是我多年来对键盘固件研究的心血结晶…...

学习路之PHP--webman安装及使用、webman/admin安装
学习路之PHP--webman安装及使用 一、安装webman二、运行三、安装webman/admin四、效果五、配置Nginx反向代理(生产环境:可选)六、使用 一、安装webman 准备: PHP > 8.1 Composer > 2.0 启用函数: putenv proc_o…...
Python打卡训练营day45——2025.06.05
作业:对resnet18在cifar10上采用微调策略下,用tensorboard监控训练过程。 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms, models from torch.utils.data import DataLoader import m…...
益莱储参加 Keysight World 2025,助力科技加速创新
全球领先的测试和测量技术解决方案提供商益莱储 / Electro Rent 再次受邀参加2025 年 6 月 26 日将于在 上海浦东嘉里大酒店隆重举行的 Keysight World Tech Day 2025 年度盛会,与是德科技深度合作,助力行业科技创新,为客户提供更经济、更灵活…...

基于cornerstone3D的dicom影像浏览器 第二十八章 LabelTool文字标记,L标记,R标记及标记样式设置
文章目录 前言一、L标记、R标记二、修改工具样式1. 样式的四种级别2. 导入annotation3. 示例1 - 修改toolGroup中的样式4. 示例2 - 修改viewport中的样式 三、可配置样式 前言 cornerstone3D 中的文字标记工具LabelTool,在添加文字标记时会弹出对话框让用户输入文字…...