当前位置: 首页 > article >正文

Postgresql常用函数操作

目录

一、字符串函数

二、数学函数

三、日期和时间函数

四、条件表达式函数

五、类型转换函数

六、聚合函数 (常与 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.lryc.cn/news/2401565.html

相关文章:

  • 用 NGINX 搭建高效 IMAP 代理`ngx_mail_imap_module`
  • 湖北理元理律所债务优化实践:法律技术与人文关怀的双轨服务
  • Springboot——整合websocket并根据type区别处理
  • Qiskit:量子计算模拟器
  • 龙虎榜——20250605
  • PDF 转 HTML5 —— HTML5 填充图形不支持 Even-Odd 奇偶规则?(第二部分)
  • 大数据离线同步工具 DataX 深度实践与 DataX Web 可视化指南
  • 记一个判决书查询API接口的开发文档
  • 残月个人拟态主页
  • 热门消息中间件汇总
  • AiPy实战:10分钟用AI造了个音乐游戏!
  • Python Rio 【图像处理】库简介
  • 贪心算法应用:分数背包问题详解
  • PHP舆情监控分析系统(9个平台)
  • 金孚媒重磅推出德国顶级媒体原生广告整合服务,覆盖12家主流媒体
  • Mnist手写数字
  • 《一生一芯》数字实验三:加法器与ALU
  • Go 语言并发编程基础:Goroutine 的创建与调度
  • 三甲医院“AI平台+专家系统”双轮驱动模式的最新编程方向分析
  • 第12期_网站搭建_几时网络验证1.3二改源码包2024 软件卡密系统 虚拟主机搭建笔记
  • [论文阅读] (38)基于大模型的威胁情报分析与知识图谱构建论文总结(读书笔记)
  • SpringBoot EhCache 缓存
  • flutter 中Stack 使用clipBehavior: Clip.none, 超出的部分无法响应所有事件
  • 回溯算法复习(1)
  • 瀚文机械键盘固件开发详解:HWKeyboard.h文件解析与应用
  • 学习路之PHP--webman安装及使用、webman/admin安装
  • Python打卡训练营day45——2025.06.05
  • 益莱储参加 Keysight World 2025,助力科技加速创新
  • 基于cornerstone3D的dicom影像浏览器 第二十八章 LabelTool文字标记,L标记,R标记及标记样式设置
  • 基于责任链模式进行订单参数的校验