我有一个要求,其中归档值是“CAH132242F0A”,因此我必须提出一个日期。 所以这里“13”是年份,所以 yyyy =“2013”和“224”日。所以我必须提取它并使其成为日期格式“yyyy-mm-dd”。
有人可以帮我怎么做吗?
根据数据块文档日期/时间格式这应该有效:
to_date(substring(code, 4, 5), 'yD')
我们提取 yyddd 的五位数字并应用格式“yD”,其中 y 代表两位或四位数字的年份,D 代表三位数字的日期。文档说基准年总是 2000,这正是你想要的。
使用
date_add
两次:一年一次,一天一次:
date_add(date_add('1999-12-31', interval substr(f, 4, 2) year), interval substr(f, 6, 3) day)
见现场演示。
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;
日期是 2013-08-12(而不是 13!)
create table mytable(datecolumn varchar(20));
insert into mytable values('CAH132242F0A');
查询:
select makedate( concat('20' ,substring(datecolumn,4,2)),substring(datecolumn,6,Length(datecolumn)-(position('F' in datecolumn))+1)) date
from mytable
约会 |
---|
2013-08-12 |
你可以在这里使用一些字符串操作奥林匹克:
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
这里我们使用
TIMESTAMPADD
和暴力子字符串操作来将正确的天数添加到指定年份的1月1日。