从字符串值评估日期格式

问题描述 投票:0回答:5

我有一个要求,其中归档值是“CAH132242F0A”,因此我必须提出一个日期。 所以这里“13”是年份,所以 yyyy =“2013”和“224”日。所以我必须提取它并使其成为日期格式“yyyy-mm-dd”。

有人可以帮我怎么做吗?

sql mysql databricks
5个回答
1
投票

根据数据块文档日期/时间格式这应该有效:

to_date(substring(code, 4, 5), 'yD')

我们提取 yyddd 的五位数字并应用格式“yD”,其中 y 代表两位或四位数字的年份,D 代表三位数字的日期。文档说基准年总是 2000,这正是你想要的。


0
投票

使用

date_add
两次:一年一次,一天一次:

date_add(date_add('1999-12-31', interval substr(f, 4, 2) year), interval substr(f, 6, 3) day)

现场演示


0
投票
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!)


0
投票
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

小提琴


0
投票

你可以在这里使用一些字符串操作奥林匹克:

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日。

© www.soinside.com 2019 - 2024. All rights reserved.