相关推荐recommended
pgsql常用的sql函数总结
作者:mmseoamin日期:2023-12-25
string_to_array函数和ANY一起使用用法
select code from ods.my_table t  where id=374;
当我查询出来的结构集为: 1,2,3
//但是我有需要把他们拆分成一个数组进行处理,可以通过 string_to_array函数
select string_to_array(code,’,’) from ods.my_table t where id=374;
结果集为:{1,2,3}
//查询t_road_workorder_info表,先把改字段转成一个数组,然后使用ANY运算符
//只要改字段包含一个1,就返回true,当where条件为true的时候,该id字段就会查询出来了;
SELECT  id FROM t_road_workorder_info WHERE '1' = any(string_to_array(code,','));
-- any和string_to_array合并使用
select '1' = any(string_to_array(
                array_to_string(
                  array(select stu_id from student),',')
                ,','));
-- array_to_string用法
-- array() 把查询出来的name字段转换为array数组
-- array_to_string(’数组‘,'/')把数组转化为字符串,并用‘,'连接(使用提供的分隔符连接数组元素)
select stu_name,array_to_string(
  array(select stu_name from student)
         ,',') from student;
-- string_to_array用法  将字符串拆分为数组
-- 第一个参数为需要转换的字符串
-- 第二个参数为字符串中每个数组的值的分隔符
select string_to_array('1,2,3',',');
-- any运算符
-- 检查数组【1,2,3】是否包含一个值为2的元素
select 2 = any(array[1,2,3]);
-- 检查数组【1,2,3】是否包含一个值大于3的元素,
select 3 < any(array[1,2,3]);
-- over()里头的分组以及排序的执行晚于where,group by,order by的执行
-- 这样结果是先按照descri分组,在按照stu_id进行排序,第一列是序列号
select row_number() over
  (partition by descri order by stu_id),descri,stu_id from student;

运行结果:

pgsql常用的sql函数总结,在这里插入图片描述,第1张

-- 先按照descri分组,在按照stu_id进行排序,然后赛选出rank为1的记录
select  * from (select row_number() over
  (partition by descri order by stu_id)rank,
  descri,stu_id from student) tmp where tmp.rank = '1';

pgsql常用的sql函数总结,在这里插入图片描述,第2张

-- 空值替换函数
select stu_name,coalesce(stu_name,'未知') from student;

pgsql常用的sql函数总结,在这里插入图片描述,第3张

-- 字符串连接函数
-- pgsql的三种字符连接函数,将多列的字段连接成一条数据
-- array_agg(),string_agg(),xmlagg()分别处理数组,字符串,xml文档
-- array_agg字符连接后是json格式
select array_agg(stu_name order by stu_age desc),descri
from student group by descri;

pgsql常用的sql函数总结,在这里插入图片描述,第4张

--string_agg可以指定分隔符
select string_agg(stu_name,',' ORDER BY stu_name),descri
from student group by  descri;

pgsql常用的sql函数总结,在这里插入图片描述,第5张

`-- 格式转换符显示转换,利用双冒号进行格式转换,字段名或数值::数值类型
select stu_id::int8 as id from student;
-- 利用数据转换函数cast进行转换, cast(字段名或数值 as 数据类型)
-- 将文本‘123’转化为int8类型
select cast('123' as int8) num;
select cast(stu_id as int) id from student;

pgsql常用的sql函数总结,在这里插入图片描述,第6张

-- 将时间戳转为指定格式
select stu_time,to_char(stu_time,'yyyy-MM-dd') time from student;

pgsql常用的sql函数总结,在这里插入图片描述,第7张

-- 文本转整数
SELECT CAST
    ( '123' AS int4 );
-- 文本转浮点数字
SELECT CAST
    ( '123.34' AS DECIMAL );
SELECT CAST
    ( '123.34' AS NUMERIC );
-- 数字转文本
SELECT CAST
    ( 123 AS VARCHAR );--可变字符串
SELECT CAST
    ( - 123 AS CHAR ( 2 ) );-- 固定字符串,进行截断,将-123转为'-1'
SELECT CAST
    ( - 123 AS CHAR ( 6 ) );-- 固定字符串,进行空格填充,将-123转为'-123  '
SELECT CAST
    ( 124.94 AS TEXT );--可变字符串,将124.94转为'124.94'
SELECT
    to_char( 124.94, '999D9' );--将124.94转为'124.9',遵循四舍五入
SELECT
    to_char( 124.94, 'FM999.99' );--将124.94转为'124.94'
SELECT
    to_char( - 124.94, 'FM9999999.99' );--将-124.94转为'-124.94'
SELECT
    to_char( - 124.94, 'FM9999999.990' );--将-124.94转为'-124.940'
SELECT
    to_char( 124, '00000' );--左端用零补齐凑够5位,将124转为'00124'
SELECT
    to_char( 124, '99999' );--左端用空格补齐凑够5位,将124转为'  124'
SELECT
    to_char( - 124.945, 'FM999' );--只显示整数部分,遵循四舍五入
-- 时间戳(timestamp)转日期(date)
SELECT CAST
    ( now( ) AS DATE );--普通日期模式
-- 时间戳(timestamp)转文本
SELECT CAST
    ( now( ) AS TEXT );--不指定输出格式
SELECT
    to_char( now( ), 'yyyy-mm-dd' );--指定输出格式;
-- 文本转日期(date)
SELECT
    to_date( '2012-01-01', 'yyyy-mm-dd' );
-- 文本转时间戳(TIMESTAMP)
SELECT
    to_timestamp( '2012-01-01 12:02:01', 'yyyy-mm-dd HH24:MI:SS' );
-- array_to_string用法
-- array() 把查询出来的name字段转换为array数组
-- array_to_string(’数组‘,'/')把数组转化为字符串,并用‘,'连接(使用提供的分隔符连接数组元素)
select stu_name,array_to_string(
  array(select stu_name from student)
         ,',') from student;

pgsql常用的sql函数总结,在这里插入图片描述,第8张

PostgreSQL 类型转换相关函数
to_char(int, text) —>整型转换为字符串 to_char(125, ‘999’)
to_char(double precision, text) —>双精度转换为字符串 to_char(125.8::real, ‘999D9’)
to_char(numeric, text) —>数字转换为字符串 to_char(-125.8, ‘999D99S’)
to_date(text, text) —>字符串转换为日期 to_date(‘05 Dec 2000’, ‘DD Mon YYYY’)
to_number(text, text) —>转换字符串为数字 to_number(‘12,454.8-’, ‘99G999D9S’)
to_timestamp(text, text) —>转换为指定的时间格式 time zone convert string to time stamp to_timestamp(‘05 Dec 2000’, ‘DD Mon YYYY’)
-- over()里头的分组以及排序的执行晚于where,group by,order by的执行
-- 这样结果是先按照descri分组,在按照stu_id进行排序,第一列是序列号
select row_number() over
  (partition by descri order by stu_id),descri,stu_id from student;
-- 先按照descri分组,在按照stu_id进行排序,然后赛选出rank为1的记录
select  * from (select row_number() over
  (partition by descri order by stu_id)rank,
  descri,stu_id from student) tmp where tmp.rank = '1';
-- 将时间戳转为指定格式
select stu_time,to_char(stu_time,'yyyy-MM-dd') time from student;
-- 空值替换函数
select stu_name,coalesce(stu_name,'未知') from student;
-- 字符串连接函数
-- pgsql的三种字符连接函数,将多列的字段连接成一条数据
-- array_agg(),string_agg(),xmlagg()分别处理数组,字符串,xml文档
-- array_agg字符连接后是json格式
select array_agg(stu_name order by stu_age desc),descri
from student group by descri;
--string_agg可以指定分隔符
select string_agg(stu_name,',' ORDER BY stu_name),descri
from student group by  descri;
-- 格式转换符显示转换,利用双冒号进行格式转换,字段名或数值::数值类型
select stu_id::int8 as id from student;
-- 利用数据转换函数cast进行转换, cast(字段名或数值 as 数据类型)
-- 将文本‘123’转化为int8类型
select cast('123' as int8) num;
select cast(stu_id as int) id from student;
select score,trunc(score) from student;
-- 逻辑操作符  and or not
select concat(t.stu_name,c.class_name)
from student t,class c where t.stu_id = c.stu_id;
--字符串拼接
select stu_name||score as stu_score
from student;
-- 将字符串转化为小写
select lower('Hello');
-- 替换子串,for后面是被替换的位数
select overlay('Hexxx,word' placing 'llo' from 3 for 4);
-- 提取子串
select substring('hello' from 1 for 3);
select substr('Hello',1,3)
-- 将除了第一个参数外的其它参数用分隔符串串接在一起,第一个参数被用作分割字符串。null参数被忽略
select concat_ws(',','abcde',2,null,22)
-- 将string中出现的所有子串from替换为子串to
select replace('hello','ello','is');
select now();
-- array_to_string用法
-- array() 把查询出来的name字段转换为array数组
-- array_to_string(’数组‘,'/')把数组转化为字符串,并用‘,'连接(使用提供的分隔符连接数组元素)
select stu_name,array_to_string(
  array(select stu_name from student)
         ,',') from student;
-- string_to_array用法  将字符串拆分为数组
-- 第一个参数为需要转换的字符串
-- 第二个参数为字符串中每个数组的值的分隔符
select string_to_array('1,2,3',',');
-- any运算符
-- 检查数组【1,2,3】是否包含一个值为2的元素
select 2 = any(array[1,2,3]);
-- 检查数组【1,2,3】是否包含一个值大于3的元素,
select 3 < any(array[1,2,3]);
-- any和string_to_array合并使用
select '1' = any(string_to_array(
                array_to_string(
                  array(select stu_id from student),',')
                ,','));
-- 条件类函数
select stu_id,
       case when stu_name = '张三' then '大大'
       else stu_name
       end as stuName,
       score
       from student;
-- nullif当value1和value2相等时,nullif返回一个空值,否则它返回value1
select nullif(1,2)
-- 查看所有函数名,返回类型,及参数个数
SELECT
  pg_proc.proname AS "函数名称",
  pg_type.typname AS "返回值数据类型",
  pg_proc.pronargs AS "参数个数"
FROM
  pg_proc
    JOIN pg_type ON (pg_proc.prorettype = pg_type.oid)
-- WHERE pronamespace = (SELECT pg_namespace.oid FROM pg_namespace WHERE nspname = '模式')
-- 逻辑操作符  and or not

pgsql常用的sql函数总结,在这里插入图片描述,第9张

pgsql常用的sql函数总结,在这里插入图片描述,第10张

pgsql常用的sql函数总结,在这里插入图片描述,第11张

select concat(t.stu_name,c.class_name)
from student t,class c where t.stu_id = c.stu_id;

字符串函数

pgsql常用的sql函数总结,在这里插入图片描述,第12张

pgsql常用的sql函数总结,在这里插入图片描述,第13张

pgsql常用的sql函数总结,在这里插入图片描述,第14张

pgsql常用的sql函数总结,在这里插入图片描述,第15张

pgsql常用的sql函数总结,在这里插入图片描述,第16张

日期,时间类函数****

pgsql常用的sql函数总结,在这里插入图片描述,第17张

pgsql常用的sql函数总结,在这里插入图片描述,第18张

pgsql常用的sql函数总结,在这里插入图片描述,第19张

pgsql常用的sql函数总结,在这里插入图片描述,第20张

pgsql常用的sql函数总结,在这里插入图片描述,第21张

pgsql常用的sql函数总结,在这里插入图片描述,第22张

数组函数

pgsql常用的sql函数总结,在这里插入图片描述,第23张

pgsql常用的sql函数总结,在这里插入图片描述,第24张

pgsql常用的sql函数总结,在这里插入图片描述,第25张

pgsql常用的sql函数总结,在这里插入图片描述,第26张

pgsql常用的sql函数总结,在这里插入图片描述,第27张

条件类函数

pgsql常用的sql函数总结,在这里插入图片描述,第28张

pgsql常用的sql函数总结,在这里插入图片描述,第29张

https://blog.csdn.net/qq_41780234/article/details/125547734?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168161182116800180642029%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=168161182116800180642029&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_ecpm_v1~rank_v31_ecpm-2-125547734-null-null.142v83control,239v2insert_chatgpt&utm_term=pgsql%E4%B8%AD%E7%9A%84%E5%B8%B8%E7%94%A8%E5%87%BD%E6%95%B0%E6%80%BB%E7%BB%93&spm=1018.2226.3001.4187