SELECT
TO_CHAR(
DATE_TRUNC('year', '2000-01-01'::date) +
CAST(SUBSTRING('CAH132242F0A' FROM 4 FOR 2) AS INTEGER) * INTERVAL '1 year' +
(CAST(SUBSTRING('CAH132242F0A' FROM 6 FOR 3) AS INTEGER) - 1) * INTERVAL '1 day',
'yyyy-mm-dd'
) AS date_str;
SELECT col,
TIMESTAMPADD(DAY,
CAST(SUBSTRING(col, 6, 3) AS UNSIGNED) - 1,
CAST(CONCAT(2000 + CAST(SUBSTRING(col, 4, 2) AS UNSIGNED), '-01-01') AS date)
) AS date
FROM yourTable; -- 2013-08-13
5条答案
按热度按时间xdnvmnnf1#
根据date/time formats上的databricks文档,这应该工作:
我们提取yyddd的五位数,并应用格式'yD',其中y代表两位数或四位数的年份,D代表三位数的日期。医生说基准年总是2000年,这正是你想要的。
w8ntj3qf2#
使用
date_add
两次:一次是一年,一次是一天:参见live demo。
prdp8dxp3#
日期是2013-08-12(而不是13!)
qlvxas9a4#
查询:
fiddle
qfe3c7zg5#
你可以在这里使用一些字符串操作奥林匹克:
∮ ∮ ∮ ∮
在这里,我们使用
TIMESTAMPADD
和蛮力子字符串操作将正确的天数添加到指定年份的1月1日。