Postgresql

在 SQL 中將自定義字元串轉換為日期

  • November 2, 2020

我有一列包含字元串,例如2015-W02,表示 2015 年的第二週。我想將其轉換為日期(例如,對應於該週的星期六)。CONVERT 和 PARSE 似乎都不支持這種風格。知道怎麼做嗎?

如果該週數標識ISO 週(= 週從星期一開始,第一周屬於“較大”部分所在的年份),您可以使用to_date()

select to_date('2015-W02', 'iyyy-"W"iw')

請注意,這將返回該週的星期一,因為這是 ISO 週的定義方式。

為了處理日期,我建議使用日曆表,您可以在 google 上找到一些腳本來生成您自己的日曆表。

在這種情況下,我使用 CTE 為 2015 年及以下範例數據生成一系列日期:

create table t (id int, dt text);
insert into t values (1, '2015-W02'), (2, '2015-W08'), (3, '2015-W21');
with days as
(
   select dt, 
          extract(dow from dt) dow, 
          extract(week from dt) wk,
          extract(year from dt) yr
   from  generate_series('2015-01-01'::timestamp, 
                         '2015-12-31'::timestamp, 
                         '1 day'::interval) dt
)
select
 *
from 
 t
join
 days 
 on substring(t.dt, 1, 4)::int = days.yr
 and substring(t.dt, 7, 2)::int = days.wk
where
 days.dow = 6; --saturdays only
編號 | dt | dt | 道瓊斯 | 週 | 年 
-: | :------- | :------------------ | :-- | :- | :---
 1 | 2015-W02 | 2015-01-10 00:00:00 | 6 | 2 | 2015
 2 | 2015-W08 | 2015-02-21 00:00:00 | 6 | 8 | 2015
 3 | 2015-W21 | 2015-05-23 00:00:00 | 6 | 21 | 2015

db<>在這裡擺弄

引用自:https://dba.stackexchange.com/questions/279040