1. 程式人生 > 實用技巧 >008.PGSQL-日期型別變換大全

008.PGSQL-日期型別變換大全

1. 日期 往前推多少天

日期往前推6個月 跨年問題
occur_period = to_char(to_timestamp(concat(left(p_occur_period,4),'-',right(p_occur_period,2)),'yyyy-MM') -interval'6 month' ,'yyyymm')

TRUNC(number,num_digits)
Number 需要截尾取整的數字。
Num_digits 用於指定取整精度的數字。Num_digits 的預設值為 0。如果Num_digits為正數,則擷取小數點後Num_digits位;如果為負數,則先保留整數部分,然後從個位開始向前數,並將遇到的數字都變為0。
TRUNC()函式在擷取時不進行四捨五入,直接擷取。
針對數字的案例,如:
select trunc(123.458) from dual --123 select trunc(123.458,0) from dual --123 select trunc(123.458,1) from dual --123.4 select trunc(123.458,-1) from dual --120 select trunc(123.458,-4) from dual --0 select trunc(123.458,4) from dual --123.458 select trunc(123) from dual --123 select trunc(123,1) from dual --
123 select trunc(123,-1) from dual --120 針對日期的案例,如: select trunc(sysdate) from dual --2017/6/13 返回當天的日期 select trunc(sysdate,'yyyy') from dual --2017/1/1 返回當年第一天. select trunc(sysdate,'mm') from dual --2017/6/1 返回當月第一天. select trunc(sysdate,'d') from dual --2017/6/11 返回當前星期的第一天(以週日為第一天). select trunc(sysdate,'
dd') from dual --2017/6/13 返回當前年月日 select trunc(sysdate,'hh') from dual --2017/6/13 13:00:00 返回當前小時 select trunc(sysdate,'mi') from dual --2017/6/13 13:06:00 返回當前分鐘

2.日期格式化

select to_char(CURRENT_TIMESTAMP,'yyyy-mm-dd hh24:mi:ss')

select to_char(CURRENT_TIMESTAMP,'yyyy-mm-dd hh24:mi:ss')

select to_char(cast('2020-02-01 15:37:05' as timestamp), 'yyyymmdd')
先把字串型別轉化為時間戳型別
to_char(cast(create_time as timestamp), 'yyyymmdd') =to_char(current_timestamp, 'yyyymmdd')

3.生成一段連續時間段內所有的資料期

generate_series,產生連續數字、步長值

select TO_CHAR(generate_series,'yyyymmdd') as occur_period
from generate_series('20200201'::TIMESTAMP, to_char(CURRENT_TIMESTAMP,'yyyymmdd') ::TIMESTAMP, '1 day')


select to_char(generate_series(to_date('20130403','yyyymmdd'), to_date('20130404','yyyymmdd'), '1 hours'), 'hh24');

4.查詢本週週一的日期

select to_char(date_trunc('week',to_date(to_char(current_date, 'YYYYww')+1, 'YYYYww')),'YYYYMMDD') as monday_date,current_date;