1.select extract(year from now()); 提取现在这个时间的年丰 month,day,hour
2.select timestamp '2011-06-03'; 返回时间戳
3.select age(current_date,current_date-1)<='25 hours'; 查询A和B的时间差距,小于多少
4.to_timestamp(substring(to_char(month, 'yyyy-MM-dd hh24 : MI : ss' )FROM 1 FOR 7),'yyyy-MM-dd') ;返回时间戳
5. sum(case log.grade when '2' then 1 else 0 end) as "2", ;Case When 语句
sum(case when 1>3 then true else false end)
6. DATE_ADD(#{month, jdbcType=TIMESTAMP},INTERVAL 1 MONTH ) 日期加一个月
7.数字保留4位小数
//select 8/(100-3) as c1,
round(8/(100-3) ,4) as c2,
round(8/(100-3)::numeric ,4) as c3,
//8/(100-3)::numeric as c4;
7.select * from A a join left B b on a.c=b.d 左连 只保留A,除非a.c可对应b.d的两条。
select * from A a join right;
8.数据库jsonb使用
建表语句如下:
create table if not exists name_age (
info jsonb
)
插入数据可以直接以json格式插入:
insert into name_age values('{"id":1,"name":"小明", "age":18}')
在json里插入新的key值gender,如下:
SELECT info||'{"gender":"男"}'::jsonb from name_age where (info->>'id')::int4 = 1
select replace(last_day(((top + (i||' month')::interval))::date),'-','')::int into r;
9.select date_trunc('month',to_date('20150305','yyyymmdd'));
select date(zz) from
generate_series(date_trunc('month',to_date('20150305','yyyymmdd')),
date_trunc('month',to_date('20150705','yyyymmdd')),'1 month') as tt(zz);
Postgres里的查询需要用到查询符。比如说,我们要查询id为1的数据,语句如下:
select info from name_age where info @> '{"id":1}'::jsonb
用到了 @> 这个查询符,表明info当前这条记录里的顶层json中有没有id为1的key-value对;有的话则满足条件。
再来一个复杂一点的查询的,查询 age>16 的记录,并且只显示 name ,语句如下:
select info->'name' from name_age where (info->>'age')::int4 > 16