PostgreSQL常用字符串函数与示例说明

文章目录

  • coalesce
  • 字符串位置(position strpos)
  • 字符串长度与大小写转换
  • 去掉空格(trim ltrim rtrim)
  • 字符串连接(concat)
  • 字符串替换
    • 简单替换(replace)
    • 替换指定位置长度(overlay)
    • 正则替换(regexp_replace)
  • 字符串匹配
  • 字符串拆分
    • split_part(拆分数组取指定位置的值)
    • string_to_array(拆分为数组)
  • regexp_split_to_array(拆分为数据,使用正则表达式)
  • regexp_split_to_table(拆分为表,多行)
  • 字符串取子串
    • 基本用法
    • 单参数
    • 正则截取
    • left与right(左右截取)
  • 正则
    • 元字符
    • like与等价符号
    • 正则匹配

coalesce

coalesce主要用来处理空,它返回第1个不为空的值,可以接受整型或者字符串,但是不能混有。

select coalesce('a','0') as r1,coalesce(1,2) as r2,coalesce(null,2,1) as r3,coalesce(null,NULL,'first') as r4;

PostgreSQL coalesce函数

字符串位置(position strpos)

返回子字符串在字符串中的位置,有点像Java中的index

select position('456' in '123456789') as r1,strpos('123456789', '678') as r2;

PostgreSQL 字符串位置

字符串长度与大小写转换

select length('hello world') as len, upper('Hello World') as up, lower('Hello World') as lo;

PostgreSQL字符串长度与大小写转换

去掉空格(trim ltrim rtrim)

select trim(' Hello World ') as t,
rtrim(' Hello World ') as r,
ltrim(' Hello World ') as l;

PostgreSQL去掉空格

字符串连接(concat)

select concat('Hello', ' ', 'World');
select concat(ip, ' ', port) as id from user;

PostgreSQL从9.1开始提供了||操作符,可以用来代替concat函数。

select ip || ' ' || port as id from user;

字符串替换

简单替换(replace)

-- 第1个参数是源字符串,第2个参数是需要的替换的old,第3个参数是替换之后的new
select replace('啊哈, 娘子', '娘子', '相公') as r;

PostgreSQL字符串替换

替换指定位置长度(overlay)

overlay(string placing substring from start [for length]): 用另一个字符串替换字符串的一部分。

-- 结果:123中文6干嘛orld
-- 将第7位开始的2位替换为了干嘛,其他不变
select overlay('123中文67world' placing '干嘛' from 7);-- 结果:123中文6干嘛rld
-- 将第7位开始的3位替换为了干嘛,其他不变
select overlay('123中文67world' placing '干嘛' from 7 for 3);

PostgreSQL字符串替换

正则替换(regexp_replace)

regexp_replace(string, pattern, replacement [, flags ]): 使用正则表达式替换字符串中的子字符串。

select regexp_replace('Hello123 World456', '\d+', '替换之后的内容', 'g') as r;

PostgreSQL字符串正则替换

字符串匹配

regexp_matches(string, pattern [, flags ]): 使用正则表达式匹配字符串中的子字符串。

-- \b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b-- 返回第1个匹配数组
select regexp_matches('123c929 33哈哈123 33hh123','(\d+)[a-z]+(\d+)') as r;

PostgreSQL字符串匹配

-- 返回全部匹配数组
select regexp_matches('123c929 33哈哈123 33hh123','(\d+)[a-z]+(\d+)','g') as r;

PostgreSQL字符串正则匹配

字符串拆分

split_part(拆分数组取指定位置的值)

select split_part('1-2-3', '-', 2) as r;

PostgreSQL字符串拆分提取

string_to_array(拆分为数组)

select 
string_to_array('1,2,3', ',') as r1,
string_to_array('1,2,3', ',', '2') as r2;

PostgreSQL字符串拆分为数组

regexp_split_to_array(拆分为数据,使用正则表达式)

除了使用固定字符拆分,还可以使用正则表达式拆分:

select regexp_split_to_array('1ab22cd3ef4', '[a-z]+') as result;

PostgreSQL字符串正则拆分为数组

regexp_split_to_table(拆分为表,多行)

除了拆分为数组,还可以拆分为table

SELECT
regexp_split_to_table('1,2,3,4,5,6', ',' ) as r1,
regexp_split_to_table('1。2。3。4。5。6', '。' ) as r2,
regexp_split_to_table('1|2|3|4|5|6', E'\\|') as r3,
regexp_split_to_table('1 2 3', ' ') as r4;

PostgreSQL字符串拆分为table

字符串取子串

  1. substring(content,start,length):第1个参数是要截取的子串,第2个参数是开始位置,从1开始,第3个参数是截取长度(可选,默认取到最后1个)
  2. substring(content from start for length):上1个的单参数模式
  3. substring(content,pattern):可以使用正则表达式

基本用法

start从1开始,如果小于1,自动修正为1,length如果大于最大长度,自动修正为最大长度。

select substring('Hello World',1,6) as S1L6,
substring('Hello World',1) as S1,
substring('Hello World',0) as S0,
substring('Hello World',0,20) as S0L20;

PostgreSQL字符串截取

substring还有一个等价的函数substr:

select substr('Hello World',1,6) as S1L6,
substr('Hello World',1) as S1,
substr('Hello World',0) as S0,
substr('Hello World',0,20) as S0L20;

单参数

select substring('Hello World' from 1 for 6) as S1L6,
substring('Hello World' from 1) as S1,
substring('Hello World' from 0) as S0,
substring('Hello World' from 0 for 20) as S0L20;-- 截取时间就非常方便了
select substring('2050-01-01 12:00:00' from 1 for 10);

PostgreSQL字符串截取

正则截取

还可以使用正则截取:

-- 截取第1个匹配
select substring('hello world c909 what the world c919 hi c929','([0-9]{1,4})') as r;

PostgreSQL字符串正则截取

下面这个匹配哪一个?

select substring('what theA1234567890the ok hahahaA987654321','.*(A\d{5}).*') AS r;

答案是:A98765,因为第1个.*是贪婪模式。

PostgreSQL字符串正则截取

截取特定子串:

-- 截取从are开始的串
select substring('what are world',position('are' in 'what are world')) as r;

left与right(左右截取)

-- 按字符长度,不是字节
select left('你好,hi,in the world',5) as r1,
right('你好,hi,in the world',5);

PostgreSQL字符串左右截取

正则

元字符

  1. |:表示选择两个候选项之一
  2. *:表示重复前面的项0次或更多次
  3. +:表示重复前面的项1次或更多次
  4. ?:表示重复前面的项0次或1次
  5. {m}:表示重复前面的项m次
  6. {m,}:表示重复前面的项m次或更多次
  7. {m,n}:表示重复前面的项至少m次,不超过n次
  8. ():匹配分组
  9. []:可选组

like与等价符号

  1. %代表0个或任意个字符
  2. _代表任意1个字符
  3. 如果想匹配%、_自身,可以使用反斜杠\转义
  4. 可以使用escape指定转义字符
CREATE TABLE public."user" (id serial4 NOT NULL,"name" varchar NULL,CONSTRAINT newtable_pk PRIMARY KEY (id)
);INSERT INTO public."user" ("name") VALUES('bob'),('boob'),('bo%b'),('Boob'),('Bo%b'),('BoB'),('B_b'),('BooB'),('b_b');

PostgreSQL的like比较灵活,可以有not like取反,也有ilike不区分大小写

select * from public.user where name like 'al%';
select * from public.user where name like 'al_';select * from public.user where name like 'bo%b';
select * from public.user where name like 'bo_b';
select * from public.user where name ilike 'bo_b';
select * from public.user where name like 'bo\%b';
select * from public.user where name like 'bo#%b' escape '#';
select * from public.user where name not like 'bo#%b' escape '#';

PostgreSQL like

PostgreSQL还提供了如下与like等价的操作符:

  1. ~~:等价于like
  2. ~~*:like不区分大小写
  3. !~~:等价于not like
  4. !~~*:not like不区分大小写
select * from public.user where name ~~ 'bo_b';
select * from public.user where name ~~* 'bo_b';
select * from public.user where name !~~ 'bo\%b';
select * from public.user where name !~~* 'bo\%b';

PostgreSQL like符号

正则匹配

PostgreSQL除了like,还支持正则匹配,这个就慎用了,可以作为的附加条件,而不要作为过滤的主要条件,特别是大表。

  1. ~:匹配正则表达式,区分大小写
  2. ~*:匹配正则表达式,不区分大小写
  3. !~:不匹配正则表达式,区分大小写
  4. !~*:不匹配正则表达式,不区分大小写
select * from public.user where name ~ '(B|b)oob';
select * from public.user where name ~* 'boob';
select * from public.user where name !~ 'boob';
select * from public.user where name !~* 'boob';

PostgreSQL正则匹配

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一次需升级系统的wxpython安装(macOS M1)

WARNING: The scripts libdoc, rebot and robot are installed in /Users/用户名/Library/Python/3.8/bin which is not on PATH. 背景:想在macos安装Robot Framework ,显示pip3不是最新,更新pip3后显示不在PATH上 参看博主文章末尾 MAC系统…

细说STM32单片机DMA中断收发RTC实时时间并改善其鲁棒性的另一种方法

目录 一、工程配置 二、软件代码 1、软件代码 2、usart.h 3、usart.c 4、rtc.c 三、运行与调试 1、合规的指令 2、proBuffer[0]不是 ‘#’ 或proBuffer[4]不是 ‘;’ 3、指令长度小于5 4、proBuffer[2]或proBuffer[3]至少一个不是数字 5、; 位于proBuffer…

离散数学---概率, 期望

本文根据 MIT 计算机科学离散数学课程整理(Lecture 22 ~ Lecture 24)。 1 非负整数期望性质 用 N 表示非负整数集合,R 是 N 上的随机变量,则 R 的期望可以表示成: 证明: 换一个形式,把每一列…

AI一键生成原创花卉印花图案——创新与效率的结合

引言 在时尚界,印花图案一直是设计师们表达创意和个性的重要手段。随着人工智能技术的发展,AI在设计领域的应用越来越广泛,其中就包括了一键生成原创花卉印花图案。本文将探讨AI如何帮助设计师们提高效率,同时保持设计的创新性和…

QT实操中遇到的一些(C++)疑惑点汇总

QT实操中 遇到的一些C疑惑点汇总 1.实例化对象的两种方法及其访问方式 1.1 示例 1.2 总结 2.基类成员的访问 2.1 直接访问继承的基类成员 2.1.1示例代码 2.1.2 输出结果 2.2 使用作用域解析符来显式调用基类成员函数 2.2.1 示例代码 2.2.2 输出结果 2.3 使用 this 指针访问基类…

图形学笔记 - 4. 几何 -网格操作和阴影映射

文章目录 网格操作:几何处理细分Loop细分Catmull-Clark细分(一般网格)网格简化 阴影 Shadows可视化阴影映射阴影映射阴影贴图的问题 网格操作:几何处理 网格细分网格简化网格正则化 网格细分(上采样) 网…

OBOO鸥柏车载广告屏:28.6寸液晶一体机的技术革新与应用前景

在数字化迅速发展的今天,OBOO鸥柏推出的28.6寸车载长条形液晶广告屏一体机成为了市场的一大亮点。这款产品不仅具有超窄边框的高亮设计,还利用异形激光切割技术,支持多种形状如圆形、方形及三角形展示,极大地提升了商用和工业屏幕…

Spring Cloud Alibaba、Spring Cloud 与 Spring Boot各版本的对应关系

参考spring-cloud-alibaba github wiki说明:版本说明 下面截取说明: 2022.x 分支 2021.x 分支 2.2.x 分支 组件版本关系

Springboot + vue 健身房管理系统项目部署

1、前言 ​ 许多人在拿到 Spring Boot 项目的源码后,不知道如何运行。我以 Spring Boot Vue 健身房管理系统的部署为例,详细介绍一下部署流程。大多数 Spring Boot 项目都可以通过这种方式部署,希望能帮助到大家。 ​ 2、项目查看 ​ 首…

SOL链上的 Meme 生态发展:从文化到创新的融合#dapp开发#

一、引言 随着区块链技术的不断发展,Meme 文化在去中心化领域逐渐崭露头角。从 Dogecoin 到 Shiba Inu,再到更多细分的 Meme 项目,这类基于网络文化的加密货币因其幽默和社区驱动力吸引了广泛关注。作为近年来备受瞩目的区块链平台之一&…

基于大数据爬虫数据挖掘技术+Python的网络用户购物行为分析与可视化平台(源码+论文+PPT+部署文档教程等)

#1024程序员节|征文# 博主介绍:CSDN毕设辅导第一人、全网粉丝50W,csdn特邀作者、博客专家、腾讯云社区合作讲师、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老…

主机管理工具 WGCLOUD v3.5.6 更新了哪些特性

WGCLOUD-v3.5.6 更新说明,2024-11-20发布 1. 新增,个性化采集,查看 2. 新增,支持达梦数据库做数据源来存贮监控数据,查看说明(8) 3. 新增,日志监控支持配置自动处理指令,当发现日志出现告警关键…

设计模式之 享元模式

享元模式(Flyweight Pattern)是一种结构型设计模式,用于减少系统中对象的数量,从而节省内存和提升性能。它通过共享相同的对象来避免重复创建类似的对象。该模式尤其适用于对象数量庞大、且重复内容较多的场景。 核心思想&#x…

yolov5 数据集分享:纯干货

数据集分享:纯干货 1. 遇见数据集:这是一个国内的数据集搜索引擎,索引了国内外的大部分网站,提供最新的数据集推荐。[遇见数据集网站](https://www.selectdataset.com/) 2. Kaggle:一个领先的数据科学和机器学习爱好者…

如何实现3D模型在线展示、互动和分享?

实现3D模型在线展示、互动和分享,可以通过多种途径和技术手段来完成。以下是一些具体的方法和步骤: 一、选择适合的3D模型展示平台 首先,你需要选择一个支持3D模型在线展示、互动和分享的平台。这些平台通常提供用户友好的界面和工具&#x…

大数据-227 离线数仓 - Flume 自定义拦截器(续接上节) 采集启动日志和事件日志

点一下关注吧!!!非常感谢!!持续更新!!! Java篇开始了! 目前开始更新 MyBatis,一起深入浅出! 目前已经更新到了: Hadoop&#xff0…

CANoe录制和回放CAN报文

目录 1、录制报文 2、离线回放 3、在线回放 3.1、在线回放设置 CANoe是一款用于汽车电子测试的工具,它可以模拟CAN网络中的各种设备,并支持CAN报文的录制和回放功能,方便我们远程调试。 1、录制报文 在Measurement Setupk面板点击Loggi…

大数据调度组件之Apache DolphinScheduler

Apache DolphinScheduler 是一个分布式易扩展的可视化 DAG 工作流任务调度系统。致力于解决数据处理流程中错综复杂的依赖关系,使调度系统在数据处理流程中开箱即用。 主要特性 易于部署,提供四种部署方式,包括Standalone、Cluster、Docker和…

XCode Build时遇到 .entitlements could not be opened 的问题

遇到错误 在构建成功的XCode工程上,手动打开XCode并Build,遇到以下问题: The file .entitlements could not be opened. Did you forget to declare this file as an output of a script phase or custom build rule which produces it 打…

关于一次开源java spring快速开发平台项目RuoYi部署的记录

关于一次开源java spring快速开发平台项目RuoYi部署的记录 本次因为需要一些练习环境,想要快速搭建一个javaweb 项目作为练习环境,经过查询和实验找到一个文档详细,搭建简单,架构也相对比较新的开源项目RuoYi。 项目介绍&#xf…