目录
1.CASE expr WHEN v1 THEN r1 [WHEN v2 THEN r2] [ELSE rn] END
2、CASE WHEN v1 THEN r1 [WHEN v2 THEN r2] ELSE rn END
1.查询指定时间范围数据
eg:select * from table where to_char(time_field, 'yyyy') = '2022'
eg:select * from table where to_char(time_field, 'yyyy-mm') = '2022-12'
eg:select * from table where to_char(time_field, 'yyyy-mm-dd') = '2022-12-12'
eg:select * from table where to_date(time_field, 'YYYY-MM-DD HH24:MI:SS') ='2021-12-18 22:24:15'postgresql 日期 字符串 转换 to_date to_char YYYY-MM-DD HH24:MI:SS_锦天的博客-CSDN博客_pg 字符串转日期
eg:select * from table where to_char(time_field, 'yyyy') >= '2021' and to_char(time_field, 'yyyy') <= '2022'
eg:select * from table where to_char(time_field, 'yyyy-mm') >= '2022-10' and to_char(time_field, 'yyyy-mm') <= '2022-12'
eg:select * from table where to_char(time_field, 'yyyy-mm-dd') >= '2022-10-10' and to_char(time_field, 'yyyy-mm-dd') <= '2022-12-12'
2.按时间类型分组查询
select to_char(time_field, 'yyyy') as time_field,count(*) from table group by to_char(time_field, 'yyyy')
select to_char(time_field, 'yyyy-mm') as time_field,count(*) from table group by to_char(time_field, 'yyyy-mm')
select to_char(time_field, 'yyyy-mm-dd') as time_field,count(*) from table group by to_char(time_field, 'yyyy-mm-dd')
3.自定义排序顺序
select * from table order by
CASE
table_field
WHEN '常量值1' THEN 1 (排序)
WHEN '常量值2' THEN 2 (排序)
end;
4.计算两时间差
date_part
可以算出相差的天数,结果向下取整,括号里面的参数可以改成year、month、hour、minutes等,值得注意的是,改成对应的参数,是用相应的时间减去时间,例如用hour的话,计算出来的结果时15-10的值,并不是两个时间想减得到的小时数
select date_part('day','2019-01-31 15:49:15'::timestamp-'2019-01-10 10:12:15'::timestamp)
select date_part('hour','2019-01-31 15:49:15'::timestamp-'2019-01-10 10:12:15'::timestamp)
extract的用法
方式一 类似date_part
select extract(day FROM (age('2019-12-10'::date , '2019-12-01'::date)));
select extract(day FROM (age('2019-01-31 15:49:15'::date , '2019-01-10 10:12:15'::date)));
问题:用此方法计算的分钟差 无法考虑到小时变化 建议用方法二
select extract(epoch from('2017-12-10 12:05'::timestamp-'2017-12-01 11:03'::timestamp)/60);
方法二
算出来两个时间相差的毫秒,在算出相应的天数,如果要精确的话,推荐这个方式
select (extract(epoch from '2019-01-31 15:49:15'::timestamp) - extract(epoch from '2019-01-10 10:12:15'::timestamp)) / (60.0 * 60.0 * 24.0)
select extract(epoch from('2017-12-10 12:05'::timestamp-'2017-12-01 11:03'::timestamp)/60); ---计算分钟差
5.保留两位小数
还是需要通过cast函数 cast A as B
它可以用于类型转换,也可以用来确定小数位数
语法 : cast (字段名 as DECIMAL(18,2))
select CAST('2.76543' as DECIMAL(18,2)) as test
6.去重后查询多字段
按照field去重 查询 field1 field2 field3字段
select distinct on(field) field1 field2 field3 from table;
7.分组拼接字符串去重
select field,string_agg(distinct field, '/' ) from www_move group by field
8.起别名大写字段转换成小写问题
select field as NEWNAME from table 此时返回的是newname
select field as “”NEWNAME“” from table 此时返回的是"NEWNAME"
即:带大写的别名需要用双引号引起来
9.数据去重
postgresql使用group by进行数据去重-2022新项目 - 一只爱阅读的程序员 - 博客园
10.对字段为空数据赋默认值
COALESCE(field,now())
11.条件判断函数
1.CASE expr WHEN v1 THEN r1 [WHEN v2 THEN r2] [ELSE rn] END
该函数表示,如果expr值等于某个vn,就返回对应位置THEN后面的结果,如果与所有值都不相等,就返回ELSE后面的rn。
例子:使用case value when语句执行分支操作,如下:
testdb=# select case 2 when 1 then 'one' when 2 then 'two' else 'more' end;
case : two
2、CASE WHEN v1 THEN r1 [WHEN v2 THEN r2] ELSE rn END
该函数表示,某个vn值为TRUE时,返回对应位置THEN后面的结果,如果所有值都不为TRUE,就返回ELSE后的rn.
例子:使用case when语句执行分支操作,如:
testdb=# select case when 1<0 then 'true' else 'false' end;
case : false
12.PostgreSql中时间格式转换和时间加减
PostgreSql中时间格式转换和时间加减_大宇进阶之路的博客-CSDN博客_postgresql 时间格式
13.几种数据类型的转换方式
1、使用cast函数进行转换
将varchar字符串转换成text类型:
select cast(varchar'123' as text);
2.将varchar字符类型转换成int4类型:
select cast(varchar'123' as int4);
3、通过::操作符进行转换
select 1::int4 2/3::numeric;
14.行列转换
postgresql行转列、列转行_Moshow郑锴的博客-CSDN博客_postgresql 列转行