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

Postgresql 常用整理

文章目录

  • 1. 查询
    • 1.1数据库表
      • 1.1.1 获取指定数据库表
      • 1.1.2 获取指定数据库表所有列名
    • 1.2 别名
      • 1.2.1 子表指定别名
      • 1.2.2 查询结果指定别名
    • 1.3 临时表
      • 1.3.1 定义临时表
      • 1.3.2 使用临时表
    • 1.4 子表
    • 1.5 分组
      • 1.5.1 group by
      • 1.5.2 partition by
    • 1.6 分组后合并指定列字段:
    • 1.7 查询条件判断:case when
    • 1.8 大小判断
      • 1.8.1 日期
      • 1.8.2 其他
    • 1.9 空值判断
      • 1.9.1 判断null
      • 1.9.2 判断空串 ‘’
      • 1.9.3 判断null和空串
    • 1.10 时间函数
      • 1.10.1 获取当前日期
      • 1.10.2 获取昨天、上周、上年日期
      • 1.10.3 获取今天、今月、今年的开始日期
      • 1.10.4 从时间戳提取年、月、日、时分秒,周
      • 1.10.5 取年、月、日、时分秒、星期数
      • 1.10.6 获取时间差(获取年、月、日差)
      • 1.10.7 获取日期差
    • 1.11 判断字符串是否包含
    • 1.12 取json字符串指定字段
      • 1.12.1 json和jsonb操作符
      • 1.12.2 操作实例
      • 1.12.3 处理json数组
    • 1.14 拼接字符串
  • 2. 创建函数(以获取日期间隔为例)
    • 2.1 创建方式
    • 2.2 函数使用

1. 查询

1.1数据库表

1.1.1 获取指定数据库表

SELECT table_name FROM
information_schema.TABLES
WHERETABLE_SCHEMA = 'act' -- 数据库名称
AND table_name LIKE '%act_re%';

1.1.2 获取指定数据库表所有列名

select column_name from information_schema.columns where table_name='ppom_object' ORDER BY ORDINAL_POSITION

1.2 别名

1.2.1 子表指定别名

  • 父表根据子表别名获取列,使用as直接加英文方式
select  display_name as alias_display_name

1.2.2 查询结果指定别名

  • 使用as 加英文双引号括住名称
select  display_name as "显示名称"

1.3 临时表

1.3.1 定义临时表

  • 多个临时表,使用一个with,其他逗号分隔,最后一个不需要逗号
with  临时表名1  as (sql查询), 临时表名2 as(sql查询)

1.3.2 使用临时表

select * from 临时表名1 t1, 临时表名2 t2

1.4 子表

  • 外部条件需要取子表列情况下,子表需要有别名(例如temp),通过别名获取
select * from (sql查询) temp where 条件

1.5 分组

1.5.1 group by

  • 只可获取到分组的列(可以有多个)和按分组汇总数量或求和结果
select uid,name, count(*) from table group by uid,name

1.5.2 partition by

  • 支持获取除分组的列以外其他的列,一般可以跟row_number()组合获取分组序号,按序号获取指定排序后的序号列
select * from (select row_number() over(partition by object_uid ORDER BY created_time ASC) AS new_index
)temp 
where temp.new_index = 1

1.6 分组后合并指定列字段:

  • 使用array_to_string和array_agg组合
    • array_to_string(数组列,分隔符)
    • array_agg( expression),加distinct去重,把表达式变成一个数组
SELECT uid, array_to_string(array_agg(distinct display_name),';') AS name FROM tmp GROUP BY uid

1.7 查询条件判断:case when

case when 条件1 then 结果1when 条件2 then 结果2else 结果3end  可对结果添加别名

1.8 大小判断

1.8.1 日期

select date_trunc('day',now()) = date_trunc('day',date('20230908'))
- 日期为datetimestamp,和字符串比较,字符串需要先转datetimestamp
select time1::timestamp > time2::timestamp
select time1::timestmap > to_timestamp('2023-11-15 18:33:41','yyyy-MM-dd hh24:mi:ss');
select to_date('2023-11-15 18:33:41','yyyy-MM-dd hh24:mi:ss');

1.8.2 其他

select a > b
# 大于:> ,小于:< ,等于:= ,不等于  !=  或 <> 

1.9 空值判断

1.9.1 判断null

select * from table where uid is null
select * from table where uid is not null

1.9.2 判断空串 ‘’

select * from table where uid = ''
select * from table where uid != ''select * from table where uid <> ''

1.9.3 判断null和空串

select * from table where length(uid) > 0
select * from table where length(uid)  <= 0

1.10 时间函数

  • (整合资料:https://blog.csdn.net/qq_40323256/article/details/123185022)

1.10.1 获取当前日期

select now();
select current_timestamp;
select to_char( now(),'yyyy-mm-dd hh:mi:ss');
select to_char(时间戳字段,'yyyy-mm-dd hh24:mi:ss');
#hh默认是12,可指定:hh12,hh24
select current_date;

1.10.2 获取昨天、上周、上年日期

select to_char( now() - interval '1 day','yyyy-mm-dd');
select to_char( now() - interval '1 week','yyyy-mm-dd hh:mi:ss');
select to_char( now() - interval '1 month','yyyy-mm-dd');
select to_char( now() - interval '1 year','yyyy-mm-dd');

1.10.3 获取今天、今月、今年的开始日期

select date_trunc('year', now())
select date_trunc('month', now())
select date_trunc('day', now())
select date_trunc('hour', now())
select date_trunc('minute', now())
select date_trunc('second', now())

1.10.4 从时间戳提取年、月、日、时分秒,周

select date_part('year', timestamp '2001-02-16 20:38:40')
#或者
select date_part('year', '2001-02-16 20:38:40'::timestamp)
select date_part('month', timestamp '2001-02-16 20:38:40')
select date_part('day', timestamp '2001-02-16 20:38:40')
select date_part('hour', timestamp '2001-02-16 20:38:40')
select date_part('minute', timestamp '2001-02-16 20:38:40')
select date_part('second', timestamp '2001-02-16 20:38:40')
select date_part('week', timestamp '2001-02-16 20:38:40')

1.10.5 取年、月、日、时分秒、星期数

// 从当前时间中提取年份
SELECT EXTRACT(YEAR FROM TIMESTAMP '2023-05-20 16:54:53.644833');    // 从当前时间中提取月份   
SELECT EXTRACT(MONTH FROM TIMESTAMP '2023-05-20 16:54:53.644833'); // 从当前时间中提取天     
SELECT EXTRACT(DAY FROM TIMESTAMP '2023-05-20 16:54:53.644833');    // 从当前时间中提取小时    
SELECT EXTRACT(HOUR FROM TIMESTAMP '2023-05-20 16:54:53.644833');     // 从当前时间中提取分钟  
SELECT EXTRACT(MINUTE FROM TIMESTAMP '2023-05-20 16:54:53.644833');     // 从当前时间中提取秒
SELECT EXTRACT(SECOND FROM TIMESTAMP '2023-05-20 16:54:53.644833');     // 从当前时间中提取世纪
SELECT EXTRACT(CENTURY FROM TIMESTAMP '2023-05-20 16:54:53.644833');    // 从当前时间中提取时间戳,单位:秒
SELECT EXTRACT(EPOCH FROM TIMESTAMP '2023-05-20 16:54:53.644833');      
//取星期数
SELECT EXTRACT(DOW FROM TIMESTAMP '2023-05-20 16:54:53.644833');  

1.10.6 获取时间差(获取年、月、日差)

#只获取年、月、日数据,其他忽略
select date_part('year', endtime::TIMESTAMP-starttime::TIMESTAMP)
select date_part('month', endtime::TIMESTAMP-starttime::TIMESTAMP)
select date_part('day', endtime::TIMESTAMP-starttime::TIMESTAMP)
#获取整体时间差,默认秒
#时间差换算成日
select date_part('epoch', endtime::timestamp - starttime::TIMESTAMP)/60/60/24
#可以外部套一层向下取整floor()、向上取整ceil()、四舍五入round()取整
select floor(date_part('epoch', endtime::timestamp - starttime::TIMESTAMP)/60/60/24)
#时间差换算成小时
select date_part('epoch', endtime::timestamp - starttime::TIMESTAMP)/60/60
#时间差换算成分钟
select date_part('epoch', endtime::timestamp - starttime::TIMESTAMP)/60

1.10.7 获取日期差

#只取日期部分计算
select Date(endtime) - DATE(starttime)

1.11 判断字符串是否包含

  • position(substring in string),第一个时目标字符串,第二个是原字符串,如果包含,返回第一次出现位置,根据是否大于0判断
select postion('aa' in 'abcd')
  • strpos(string, substring),作用与position一致

1.12 取json字符串指定字段

  • (参考资料:https://blog.csdn.net/c_zyer/article/details/130968257)

1.12.1 json和jsonb操作符

在这里插入图片描述

1.12.2 操作实例

select order_json::json->'orderBody' from order -- 对象域
select order_json::json->>'orderBody' from order -- 文本
select order_json::json#>'{orderBody}' from order -- 对象域
select order_json::json#>>'{orderBody}' from order -- 文本# 列名:column,列值: {"key":"","name":"发起人修改","id":""}
select column::json ->> 'name'

1.12.3 处理json数组

#取数组长度
select json_array_length(name::json)#取出json数组中的某个字段返回json数组
#列名:column,列值:[{"key":"","name":"xxx","id":""}]
select json_array_elements(column::json) -> 'name'

1.14 拼接字符串

// a11b
select concat('a', 11, NULL, 'b');
// aabb
select  'aa' || 'bb'

2. 创建函数(以获取日期间隔为例)

2.1 创建方式

  • 可以通过sql文件执行函数定义,或者通过sql工具界面操作创建函数的方式,部分工具(以HeidiSQL为例)执行sql在包含主题的 B O D Y BODY BODY处会提示,以及不能使用 符号,可以在其他工具执行( N a v i c a t e 、 p g A d m i n ): u n t e r m i n a t e d d o l l a r − q u o t e d s t r i n g a t o r n e a r " 符号,可以在其他工具执行(Navicate、pgAdmin): unterminated dollar-quoted string at or near " 符号,可以在其他工具执行(NavicatepgAdmin):unterminateddollarquotedstringatornear"BODY$
  • 函数内容
-- 定义函数所处表,名称,public.f_daydelay,
-- 输入参数名称 类型 
-- 返回类型 RETURNS type
-- 创建函数语言选择 LANGUAGE,可以选择(plpgsql,sql,plpython,plperl,...)
-- 启动成本 COST 100(默认值)
-- 波动率 VOLATILE (波动率默认分类),可以执行任何操作CREATE OR REPLACE FUNCTION public.f_daydelay(starttime timestamp with time zone,endtime timestamp with time zone)RETURNS numericLANGUAGE 'plpgsql'COST 100VOLATILE PARALLEL UNSAFE
AS $BODY$--声明函数使用变量名称 类型,函数都需要使用分号结尾
DECLAREv_return  varchar;--返回间隔时间 xx日xx时xx分
--函数主体    
BEGIN--省略方法--返回值     RETURN v_return;--异常处理EXCEPTION WHEN OTHERS THENRETURN SQLERRM;
--主体结束    
END;
$BODY$;--定义函数授权用户
ALTER FUNCTION public.f_daydelay(timestamp with time zone, timestamp with time zone)OWNER TO postgres;

2.2 函数使用

select f_daydelay('2023-05-24 11:38:14.38'::timestmap,'2023-06-20 11:38:14.38'::timestamp);

相关文章:

Postgresql 常用整理

文章目录 1. 查询1.1数据库表1.1.1 获取指定数据库表1.1.2 获取指定数据库表所有列名 1.2 别名1.2.1 子表指定别名1.2.2 查询结果指定别名 1.3 临时表1.3.1 定义临时表1.3.2 使用临时表 1.4 子表1.5 分组1.5.1 group by1.5.2 partition by 1.6 分组后合并指定列字段&#xff1a…...

如何在Jupyter Lab中安装不同的Kernel

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️ &#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…...

Java钩子函数的使用

目录 1. Java中常见的钩子函数 2. 使用钩子函数实现程序的清理工作 3. 使用钩子函数处理线程中的未捕获异常 4. 使用钩子函数实现窗口关闭时的操作 在Java编程中&#xff0c;钩子函数&#xff08;Hook Function&#xff09;是一种能够在特定事件发生时执行的代码块。钩子函…...

C++跨DLL内存所有权问题探幽(一)DLL提供的全局单例模式

最近在开发的时候&#xff0c;特别是遇到关于跨DLL申请对象、指针、内存等问题的时候遇到了这么一个问题。 问题 跨DLL能不能调用到DLL中提供的单例&#xff1f; 问题比较简单&#xff0c;就是我现在有一个进程A&#xff0c;有DLL B DLL C&#xff0c;这两个DLL都依赖DLL D的…...

短时间不点击云服务器,自动化断开连接,怎么设置长时间

在 Linux 系统中&#xff0c;如果你希望在一段时间内没有操作后保持远程连接不断开&#xff0c;可以通过修改 SSH 服务器的配置来实现。具体的步骤如下&#xff1a; 打开 SSH 服务器的配置文件&#xff1a; sudo vi /etc/ssh/sshd_config 找到以下两个参数并进行修改&#xff…...

typhonjs-escomplex 代码可读性 可维护度探索

目前市面上的前端代码质量评分中的代码可维护度是大都是基于 typhonjs-escomplex 这个库扫描而来&#xff0c;但是这个库的官方文档并没有介绍相关指标数据的计算规则&#xff0c;不知道规则如何提升指标数据呢&#xff1f;所以本文对 typhonjs-escomplex 源码进行探索&#xf…...

支持向量机基本原理,Libsvm工具箱详细介绍,基于支持向量机SVM的人脸朝向识别

目录 支持向量机SVM的详细原理 SVM的定义 SVM理论 Libsvm工具箱详解 简介 参数说明 易错及常见问题 完整代码和数据下载链接: 基于支持向量机SVM人脸朝向识别(代码完整,数据齐全)资源-CSDN文库 https://download.csdn.net/download/abc991835105/88527821 SVM应用实例, 基…...

密码破解工具的编写

预计更新 网络扫描工具的编写漏洞扫描工具的编写Web渗透测试工具的编写密码破解工具的编写漏洞利用工具的编写拒绝服务攻击工具的编写密码保护工具的编写情报收集工具的编写 密码破解工具是一种常见的安全工具&#xff0c;它可以通过不断尝试不同的密码组合来破解加密的数据或…...

BES2700H开发不完全手册

BES2700H开发不完全手册 是否需要申请加入数字音频系统研究开发交流答疑群(课题组)&#xff1f;可加我微信hezkz17, 本群提供音频技术答疑服务&#xff0c;群赠送语音信号处理降噪算法&#xff0c;ANC AEC ENC EQ BF BES蓝牙耳机音频资料 1 成功编译 2 代码 3 开放文档...

OpenGL的学习之路-3

前面1、2介绍的都是glut编程 下面就进行opengl正是部分啦。 1.绘制点 #include <iostream> #include <GL/gl.h> #include <GL/glu.h> #include <GL/glut.h>void myMainWinDraw();int main(int argc,char** argv) {glutInit(&argc,argv);glutIni…...

Vue 小黑记事本组件版

渲染功能&#xff1a; 1.提供数据&#xff1a; 提供在公共的父组件 App.vue 2.通过父传子&#xff0c;将数据传递给TodoMain 3.利用 v-for渲染 添加功能&#xff1a; 1.收集表单数据 v-model 2.监听事件&#xff08;回车点击都要添加&#xff09; 3.子传父&#xff0c;讲…...

javascript如何清空数组?

可以使用以下方法清空JavaScript数组&#xff1a; 直接赋值为空数组 arr []; let arr [1, 2, 3, 4]; arr []; // 现在arr是空数组使用 splice() 方法删除所有元素 let arr [1, 2, 3, 4]; arr.splice(0, arr.length); // 现在arr是空数组使用 length 属性将数组截断 let ar…...

MySQL MHA高可用切换

MySQL MHA 1&#xff0e;什么是 MHA MHA&#xff08;MasterHigh Availability&#xff09;是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。 MHA 的出现就是解决MySQL 单点的问题。 MySQL故障切换过程中&#xff0c;MHA能做到0-30秒内自动完成故障切换操作。 MHA能在…...

【Python】【应用】Python应用之一行命令搭建http、ftp服务器

&#x1f41a;作者简介&#xff1a;花神庙码农&#xff08;专注于Linux、WLAN、TCP/IP、Python等技术方向&#xff09;&#x1f433;博客主页&#xff1a;花神庙码农 &#xff0c;地址&#xff1a;https://blog.csdn.net/qxhgd&#x1f310;系列专栏&#xff1a;Python应用&…...

C++模拟实现——红黑树

一、介绍 红黑树也是对一般的搜索二叉树不能保证平衡的一个改进&#xff0c;和AVL树采用的思路不同&#xff0c;但同样需要旋转&#xff0c;其本质也是一颗平衡搜索二叉树&#xff0c;其节点有颜色的区分&#xff0c;并且被一些规则束缚&#xff0c;在这些规则下&#xff0c;能…...

java基础-数据类型

1、变量 变量就是申请内存来存储值。也就是说&#xff0c;当创建变量的时候&#xff0c;需要在内存中申请空间。 内存管理系统根据变量的类型为变量分配存储空间&#xff0c;分配的空间只能用来储存该类型数据。 因此&#xff0c;通过定义不同类型的变量&#xff0c;可以在内…...

设计数据库的时候会考虑哪些因素,怎样去建表?

在设计数据库时&#xff0c;通常会考虑以下因素&#xff1a; 数据的结构和关系&#xff1a;首先需要分析业务需求&#xff0c;了解需要存储的数据类型、数据之间的关系以及数据的组织结构。 数据的完整性和一致性&#xff1a;确保数据库中的数据完整性和一致性&#xff0c;例如…...

AI 绘画 | Stable Diffusion精确控制ControlNet扩展插件

ControlNet ControlNet是一个用于控制AI图像生成的插件,通过使用Conditional Generative Adversarial Networks(条件生成对抗网络)的技术来生成图像。它允许用户对生成的图像进行更精细的控制,从而在许多应用场景中非常有用,例如计算机视觉、艺术设计、虚拟现实等。 对于…...

青少年编程学习 等级考试 信奥赛NOI/蓝桥杯/NOC/GESP等比赛资料合集

一、博主愚见 在当今信息技术高速发展的时代&#xff0c;编程已经成为了一种必备的技能。随着社会对于科技人才的需求不断增加&#xff0c;青少年编程学习正逐渐成为一种趋势。为了更好地帮助青少年学习编程&#xff0c;提升他们的技能和素质&#xff0c;博主结合自身多年从事青…...

Linux 函数库

函数库&#xff1a; 我们的C程序中&#xff0c;并没有定义“printf”的函数实现,且在预编译中包含的“stdio.h”中也只有该函数的声明,而没有定义函数的实现,那么,是在哪里实“printf”函数的呢? 最后的答案是:系统把这些函数实现都被做到名为 libc.so.6 的库文件中去…...

IGP(Interior Gateway Protocol,内部网关协议)

IGP&#xff08;Interior Gateway Protocol&#xff0c;内部网关协议&#xff09; 是一种用于在一个自治系统&#xff08;AS&#xff09;内部传递路由信息的路由协议&#xff0c;主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...

聊聊 Pulsar:Producer 源码解析

一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台&#xff0c;以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中&#xff0c;Producer&#xff08;生产者&#xff09; 是连接客户端应用与消息队列的第一步。生产者…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南

&#x1f680; C extern 关键字深度解析&#xff1a;跨文件编程的终极指南 &#x1f4c5; 更新时间&#xff1a;2025年6月5日 &#x1f3f7;️ 标签&#xff1a;C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言&#x1f525;一、extern 是什么&#xff1f;&…...

浅谈不同二分算法的查找情况

二分算法原理比较简单&#xff0c;但是实际的算法模板却有很多&#xff0c;这一切都源于二分查找问题中的复杂情况和二分算法的边界处理&#xff0c;以下是博主对一些二分算法查找的情况分析。 需要说明的是&#xff0c;以下二分算法都是基于有序序列为升序有序的情况&#xf…...

css3笔记 (1) 自用

outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size&#xff1a;0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格&#xff…...

聊一聊接口测试的意义有哪些?

目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开&#xff0c;首…...

【Oracle】分区表

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

短视频矩阵系统文案创作功能开发实践,定制化开发

在短视频行业迅猛发展的当下&#xff0c;企业和个人创作者为了扩大影响力、提升传播效果&#xff0c;纷纷采用短视频矩阵运营策略&#xff0c;同时管理多个平台、多个账号的内容发布。然而&#xff0c;频繁的文案创作需求让运营者疲于应对&#xff0c;如何高效产出高质量文案成…...

android13 app的触摸问题定位分析流程

一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...

C语言中提供的第三方库之哈希表实现

一. 简介 前面一篇文章简单学习了C语言中第三方库&#xff08;uthash库&#xff09;提供对哈希表的操作&#xff0c;文章如下&#xff1a; C语言中提供的第三方库uthash常用接口-CSDN博客 本文简单学习一下第三方库 uthash库对哈希表的操作。 二. uthash库哈希表操作示例 u…...