Postgres语法记录

目录

1.查询指定时间范围数据

2.按时间类型分组查询

3.自定义排序顺序

4.计算两时间差

date_part

extract的用法

方式一 类似date_part

方法二

5.去重后查询多字段

6.分组拼接字符串去重

7.数据去重

8.对字段为空数据赋默认值

9.条件判断函数

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

10.PostgreSql中时间格式转换和时间加减

11.几种数据类型的转换方式


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数据库去重方法 - 走看看

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

postgresql——条件判断函数,系统函数等

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 列转行

 SQL 行转列,列转行_万物皆可休的博客-CSDN博客_sql列转行

SQL四种方法实现行列转换超详细_楚生辉的博客-CSDN博客_sql列转行

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值