Postgresql常用函数操作

news2025/6/6 10:59:46

目录

一、字符串函数

二、数学函数

三、日期和时间函数

四、条件表达式函数

五、类型转换函数

六、聚合函数 (常与 GROUP BY 一起使用)

重要提示


 

PostgreSQL 提供了极其丰富的内置函数,用于操作和处理数据。以下是一些最常用的函数分类和示例:

一、字符串函数

  1. CONCAT(str1, str2, ...) / str1 || str2 || ...

    • 功能: 连接字符串。
    • 示例: SELECT CONCAT('Hello', ' ', 'World'); 或 SELECT 'Hello' || ' ' || 'World'; -> 'Hello World'
  2. LENGTH(str) / CHAR_LENGTH(str)

    • 功能: 返回字符串的字符数。
    • 示例: SELECT LENGTH('PostgreSQL'); -> 10
  3. UPPER(str)

    • 功能: 将字符串转换为大写。
    • 示例: SELECT UPPER('hello'); -> 'HELLO'
  4. LOWER(str)

    • 功能: 将字符串转换为小写。
    • 示例: SELECT LOWER('SQL'); -> 'sql'
  5. 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'
  6. 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)
  7. REPLACE(str, from_str, to_str)

    • 功能: 将字符串中出现的所有 from_str 替换为 to_str
    • 示例: SELECT REPLACE('foo bar baz', 'bar', 'qux'); -> 'foo qux baz'
  8. SPLIT_PART(str, delimiter, field_num)

    • 功能: 根据分隔符拆分字符串,并返回指定字段编号的部分(从1开始)。
    • 示例: SELECT SPLIT_PART('john.doe@example.com', '.', 2); -> 'doe@example' (取第二个点之前的部分)
  9. POSITION(substring IN str)

    • 功能: 返回子串在字符串中第一次出现的位置(从1开始),找不到则返回0。
    • 示例: SELECT POSITION('SQL' IN 'PostgreSQL'); -> 8
  10. LEFT(str, n) / RIGHT(str, n)

    • 功能: 返回字符串左边/右边的 n 个字符。
    • 示例: SELECT LEFT('PostgreSQL', 4); -> 'Post'SELECT RIGHT('PostgreSQL', 3); -> 'SQL'

二、数学函数

  1. ROUND(value [, precision])

    • 功能: 将数值四舍五入到指定的小数位数(precision,默认为0)。
    • 示例: SELECT ROUND(123.4567, 2); -> 123.46SELECT ROUND(123.4567); -> 123
  2. CEIL(value) / CEILING(value)

    • 功能: 返回大于或等于参数的最小整数(向上取整)。
    • 示例: SELECT CEIL(123.45); -> 124SELECT CEIL(-123.45); -> -123
  3. FLOOR(value)

    • 功能: 返回小于或等于参数的最大整数(向下取整)。
    • 示例: SELECT FLOOR(123.45); -> 123SELECT FLOOR(-123.45); -> -124
  4. ABS(value)

    • 功能: 返回数值的绝对值。
    • 示例: SELECT ABS(-15); -> 15
  5. POWER(base, exponent)

    • 功能: 返回 base 的 exponent 次幂。
    • 示例: SELECT POWER(2, 3); -> 8
  6. SQRT(value)

    • 功能: 返回数值的平方根。
    • 示例: SELECT SQRT(9); -> 3
  7. MOD(dividend, divisor)

    • 功能: 返回 dividend 除以 divisor 的余数(模运算)。
    • 示例: SELECT MOD(10, 3); -> 1
  8. RANDOM()

    • 功能: 返回一个范围在 [0.0, 1.0) 的随机浮点数。
    • 示例: SELECT RANDOM(); -> 0.123456789... (每次不同)
  9. PI()

    • 功能: 返回圆周率 π 的值。
    • 示例: SELECT PI(); -> 3.141592653589793
  10. 三角函数 (SINCOSTANASINACOSATANATAN2)

    • 功能: 执行标准的三角函数计算(参数通常为弧度)。
    • 示例: SELECT SIN(PI()/2); -> 1.0

三、日期和时间函数

  1. CURRENT_DATE

    • 功能: 返回当前日期(不含时间)。
    • 示例: SELECT CURRENT_DATE; -> 2023-10-27 (取决于执行日期)
  2. CURRENT_TIME / CURRENT_TIME(precision)

    • 功能: 返回当前时间(不含日期),可指定精度。
    • 示例: SELECT CURRENT_TIME; -> 14:30:15.123456+08 (取决于执行时间和时区)
  3. CURRENT_TIMESTAMP / CURRENT_TIMESTAMP(precision) / NOW()

    • 功能: 返回当前日期和时间(带时区),可指定精度。NOW() 是 CURRENT_TIMESTAMP 的同义词。
    • 示例: SELECT CURRENT_TIMESTAMP; -> 2023-10-27 14:30:15.123456+08
  4. 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 (取决于当前时间)
  5. DATE_PART('field', source)

    • 功能: 功能与 EXTRACT 完全相同,是 PostgreSQL 的历史函数形式。推荐使用标准的 EXTRACT
    • 示例: SELECT DATE_PART('dow', CURRENT_DATE); -> 5 (返回星期几,0=周日, 1=周一, …, 6=周六)
  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
  7. 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 (取决于当前时间)
  8. 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(月份全称)。
  9. INTERVAL 'string'

    • 功能: 构造一个时间间隔值。
    • 示例:
      • SELECT CURRENT_TIMESTAMP + INTERVAL '1 day 2 hours'; (一天两小时之后)
      • SELECT CURRENT_DATE - INTERVAL '1 week'; (一周之前)

四、条件表达式函数

  1. COALESCE(value1, value2, ..., valuen)

    • 功能: 返回参数列表中第一个非 NULL 的值。常用于处理可能为 NULL 的字段并提供默认值。
    • 示例: SELECT COALESCE(description, 'No description provided') FROM products; (如果 description 是 NULL,则返回 'No description provided')
  2. NULLIF(value1, value2)

    • 功能: 如果 value1 等于 value2,则返回 NULL;否则返回 value1。常用于避免除零错误或特定比较。
    • 示例:
      • SELECT NULLIF(0, 0); -> NULL
      • SELECT 100 / NULLIF(column_value, 0); (避免除零错误)
  3. GREATEST(value1, value2, ...)

    • 功能: 返回参数列表中的最大值。
    • 示例: SELECT GREATEST(10, 5, 20, 15); -> 20
  4. LEAST(value1, value2, ...)

    • 功能: 返回参数列表中的最小值。
    • 示例: SELECT LEAST(10, 5, 20, 15); -> 5
  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;

五、类型转换函数

  1. CAST(value AS type)

    • 功能: 标准的类型转换运算符。
    • 示例:
      • SELECT CAST('123' AS INTEGER); -> 123
      • SELECT CAST(CURRENT_TIMESTAMP AS DATE); -> 2023-10-27 (截断时间部分)
  2. value::type

    • 功能: PostgreSQL 特有的类型转换简写(功能等同于 CAST)。
    • 示例:
      • SELECT '123'::INTEGER; -> 123
      • SELECT '2023-10-27'::DATE; -> 2023-10-27
  3. TO_DATE(text, format)

    • 功能: 根据指定格式将字符串转换为日期。
    • 示例: SELECT TO_DATE('27/10/2023', 'DD/MM/YYYY'); -> 2023-10-27
  4. 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 一起使用)

  1. COUNT(*) / COUNT(expression)

    • 功能: 计算行数(COUNT(*))或非 NULL 值的行数(COUNT(expression))。
    • 示例: SELECT COUNT(*) FROM orders; (总订单数), SELECT COUNT(customer_id) FROM orders; (有客户的订单数 - customer_id 非 NULL 的行数)
  2. SUM(expression)

    • 功能: 计算数值表达式在所有行中的总和。
    • 示例: SELECT SUM(amount) FROM payments; (总支付金额)
  3. AVG(expression)

    • 功能: 计算数值表达式在所有行中的平均值。
    • 示例: SELECT AVG(price) FROM products; (平均价格)
  4. MIN(expression)

    • 功能: 返回表达式在所有行中的最小值。
    • 示例: SELECT MIN(created_at) FROM events; (最早的事件时间)
  5. MAX(expression)

    • 功能: 返回表达式在所有行中的最大值。
    • 示例: SELECT MAX(price) FROM products; (最高价格)
  6. 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; (列出每个部门的员工名字,按入职日期排序,逗号分隔)

重要提示

  1. 官方文档是你的朋友: 这是最权威、最全面的参考。搜索 “PostgreSQL [函数名]” 通常能找到官方文档链接。
  2. 函数重载: 很多函数名相同但参数类型不同(如 ROUND 处理 numeric 和 double precision)。
  3. 时区: 处理时间戳时要特别注意时区设置 (timezone 配置参数)。
  4. NULL 处理: 理解函数如何处理 NULL 输入非常重要(如 COUNT(*) 与 COUNT(column) 的区别,SUM 忽略 NULL)。
  5. 正则表达式: PostgreSQL 有强大的正则表达式支持(~!~~*!~*REGEXP_MATCHREGEXP_REPLACEREGEXP_SPLIT_TO_ARRAYREGEXP_SPLIT_TO_TABLE),非常适用于复杂字符串处理。

这份列表涵盖了最常用的核心函数。实际应用中,根据具体需求查阅官方文档是最高效的方法。


 这篇博客到这里就接近尾声了,希望我的分享能给您带来一些启发和帮助,别忘了点赞、收藏。您的每一次互动、鼓励是我持续创作的动力!期待与您再次相遇,共同探索更广阔的世界!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2401565.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

湖北理元理律所债务优化实践:法律技术与人文关怀的双轨服务

一、债务优化的法律逻辑与生活平衡 在债务重组领域,专业机构需同时解决两个核心问题: 法律合规性:依据《民法典》第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商用牌照发放预期加速&…

残月个人拟态主页

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

热门消息中间件汇总

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

AiPy实战:10分钟用AI造了个音乐游戏!

“在探索AI编程边界时,我尝试了一个实验:能否让自然语言指令直接生成可交互的音乐学习应用?作为新一代智能编程协作框架,AiPy展示了对开发意图的深度理解能力——当输入创建钢琴学习游戏,包含动态难度关卡和即时反馈系…

贪心算法应用:分数背包问题详解

贪心算法与分数背包问题 贪心算法(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&#xff1a; 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…

三甲医院“AI平台+专家系统”双轮驱动模式的最新编程方向分析

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

第12期_网站搭建_几时网络验证1.3二改源码包2024 软件卡密系统 虚拟主机搭建笔记

我用夸克网盘分享了「第12期_网站搭建_几时网络验证1.3二改源码包2024.7z」&#xff0c;点击链接即可保存。打开「夸克APP」&#xff0c;无需下载在线播放视频&#xff0c;畅享原画5倍速&#xff0c;支持电视投屏。 链接&#xff1a;https://pan.quark.cn/s/fe8e7786bd6d

[论文阅读] (38)基于大模型的威胁情报分析与知识图谱构建论文总结(读书笔记)

《娜璋带你读论文》系列主要是督促自己阅读优秀论文及听取学术讲座&#xff0c;并分享给大家&#xff0c;希望您喜欢。由于作者的英文水平和学术能力不高&#xff0c;需要不断提升&#xff0c;所以还请大家批评指正&#xff0c;非常欢迎大家给我留言评论&#xff0c;学术路上期…

回溯算法复习(1)

1.回溯的定义&#xff08;ai&#xff09; 回溯&#xff08;Backtracking&#xff09; 是一种通过搜索所有可能的解空间来求解问题的算法思想&#xff0c;属于试探性求解方法。其核心是在搜索过程中逐步构建解&#xff0c;并在发现当前路径无法得到有效解时&#xff0c;主动回退…

学习路之PHP--webman安装及使用、webman/admin安装

学习路之PHP--webman安装及使用 一、安装webman二、运行三、安装webman/admin四、效果五、配置Nginx反向代理&#xff08;生产环境&#xff1a;可选&#xff09;六、使用 一、安装webman 准备&#xff1a; PHP > 8.1 Composer > 2.0 启用函数&#xff1a; putenv proc_o…

基于cornerstone3D的dicom影像浏览器 第二十八章 LabelTool文字标记,L标记,R标记及标记样式设置

文章目录 前言一、L标记、R标记二、修改工具样式1. 样式的四种级别2. 导入annotation3. 示例1 - 修改toolGroup中的样式4. 示例2 - 修改viewport中的样式 三、可配置样式 前言 cornerstone3D 中的文字标记工具LabelTool&#xff0c;在添加文字标记时会弹出对话框让用户输入文字…

电路图识图基础知识-自耦变压器降压启动电动机控制电路(十六)

自耦变压器降压启动电动机控制电路 自耦变压器降压启动电动机控制电路是将自耦变压器的原边绕组接于电源侧&#xff0c;副边绕组接 于电机侧。电动机定子绕组启动时的电压为自耦变压器降压后得到的电压&#xff0c;这样可以减少电动 机的启动电流和启动力矩&#xff0c;当电动…

神经网络与深度学习 网络优化与正则化

1.网络优化存在的难点 &#xff08;1&#xff09;结构差异大&#xff1a;没有通用的优化算法&#xff1b;超参数多 &#xff08;2&#xff09;非凸优化问题&#xff1a;参数初始化&#xff0c;逃离局部最优 &#xff08;3&#xff09;梯度消失&#xff08;爆炸&#xff09; …