Postgresql
在 SQL 中將自定義字元串轉換為日期
我有一列包含字元串,例如
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<>在這裡擺弄