postgresql根據周和年計算周對應的時間段

2021-09-27 11:49:07 字數 2087 閱讀 4867

方法一:

select current_date +cast(-1*(to_number(to_char(date (current_date),'d'),'99')-2) ||' days' as interval)

解析:to_number 將乙個字串轉換成數字

格式:to_number(string,format) 

-- 一周裡的日子(1-7;週日是1)

select to_char(current_date ,'d')

ddd 一年裡的日子(001-366)

dd 乙個月裡的日子(01-31)

d 一周裡的日子(1-7;週日是1)

-- 將得到的字串轉換成數字

select to_number(to_char(current_date,'d'),'99')

-- 因為得到的星期一為2,所以要減去2

select to_number(to_char(current_date,'d'),'99')-2

-- 將得到的數字乘以 -1  比如例子中:-1*3  就是 -3  ,也就是減去 3天

select cast(-1*3 || 'days' as interval) 

-- 就是將當天減去0天 得到了星期一的日期

select cast(-1*0 || 'days' as interval) + current_date

select   to_char(current_date +cast(-1*(to_number(to_char(current_date,'d'),'99')-2) ||' days' as interval),'yyyy-mm-dd');

方法二:

select   to_char('2019-09-27'::date -  (    case when extract(dow from timestamp '2019-09-27') = 0 then 6 

when extract(dow from timestamp '2019-09-27') = 1 then 0 

else extract(dow from timestamp '2019-09-27') -1

end )::integer,'yyyy-mm-dd')  as 星期一日期 

,to_char('2019-09-27'::date +  (     case when extract(dow from timestamp '2019-09-27') = 0 then 0 

else  7-  extract(dow from timestamp '2019-09-27')

end )::integer,'yyyy-mm-dd') 星期日日期

select   extract(dow from cast('2019-04-23' as timestamp))

select   to_char(cast(-1*(to_number(to_char(to_date('2019'||'-01-01','yyyy-mm-dd'),'d'),'99')-2)|| 'days' as interval) + to_date('2019'||'-01-01','yyyy-mm-dd'),'yyyy-mm-dd') 在2023年1月1日所屬星期的星期一日期

, to_char(to_date(cast(-1*(to_number(to_char(to_date('2019'||'-01-01','yyyy-mm-dd'),'d'),'99')-2)|| 'days' as interval) + to_date('2019'||'-01-01','yyyy-mm-dd'),'yyyy-mm-dd')

+cast(38*7|| 'days' as interval),'yyyy-mm-dd') 第38周的開始時間

, to_char(to_date(cast(-1*(to_number(to_char(to_date('2019'||'-01-01','yyyy-mm-dd'),'d'),'99')-2)|| 'days' as interval) + to_date('2019'||'-01-01','yyyy-mm-dd'),'yyyy-mm-dd')

+cast(38*7+6|| 'days' as interval),'yyyy-mm-dd') 第38周的結束時間

根據年,周獲取周的第一日日期

public static void main string args 指定星期幾即可 public static localdate parse string text 需要注意的是這裡一周是從週日開始到週六結束的,2018 482表示的是2018年第48個星期的第二天也就是星期一,即2018年1...

PostgreSQL根據查詢結果執行插入或更新操作

最近需要把老專案中oracle語法改為pg的,其中乙個邏輯為匯入excel資料,根據資料的唯一標識做插入或者更新操作,資料庫中有此資料,則執行更新,反之插入。oracle declare v count number begin select count 1 into v count from un...

根據指定日期獲取周,月,年的開始和結束時間

獲取本週的第一天日期和最後一天日期 按中國周 param todaytime 2017 03 15 return arr 0 第一天日期 arr 1 最後一天日期 throws parseexception public static string getweekstartandenddate st...