pgsql简录(age,case when,数据模拟)

pgsql简录

使用age计算两个日期时间差

首先使用age计算两个日期相差时间看一下结果

select age('2023-06-09 12:12:21', '2022-05-08 11:11:20')

在这里插入图片描述
可以看出它的结果是年月日时分秒,因此可以使用EXTRACT截取计算值

计算两个时间相差年数,月数,天数,小时,分,秒

select EXTRACT(YEAR FROM age('2023-06-09 12:12:21', '2022-05-08 11:11:20'))
select EXTRACT(MONTH FROM age('2023-06-09 12:12:21', '2022-05-08 11:11:20'))
select EXTRACT(DAY FROM age('2023-06-09 12:12:21', '2022-05-08 11:11:20'))
select EXTRACT(HOUR FROM age('2023-06-09 12:12:21', '2022-05-08 11:11:20'))
select EXTRACT(MINUTE FROM age('2023-06-09 12:12:21', '2022-05-08 11:11:20'))
select EXTRACT(SECOND FROM age('2023-06-09 12:12:21', '2022-05-08 11:11:20'))

数值都为1
在这里插入图片描述

SELECT EXTRACT(YEAR from age(now(), gmt_create))+round(cast((EXTRACT(MONTH from age(now(), gmt_create))/12) as numeric), 1) as age from tb_message_manage GROUP BY age

条件选择 case when

CASE 表达式是一种通用的条件表达式,类似于其它语言中的 if/else 语句。

CASE WHEN condition THEN result[WHEN ...][ELSE result]
END 字段名称

例:CASE WHEN a=1 THEN ‘one’ WHEN a=2 THEN ‘two’ ELSE ‘other’ END name

数据模拟

 select
generate_series, -- 当前序号
round(cast(random()+90 as numeric),2)||'%' as d /*取99%~100%的随机数*/

,floor(random()*10000000000)
,(array[6, 8])[floor(random()*2)::int+1] /*在性别数组中随机取性别*/
,(array['男','女','其他'])[floor(random()*3)::int+1] /*在性别数组中随机取性别*/

,(array['小四','小花','小凡'])[floor(random()*3)::int+1] /*在名字数组中随机取名字*/

,floor(random()*(10000000000-13899999999)+13899999999) /*生成相对正确的手机号*/

from generate_series(1,10000); 

猜你喜欢

转载自blog.csdn.net/weixin_42949219/article/details/127676486