mysql 从字符串值计算日期格式

bqujaahr  于 2023-05-05  发布在  Mysql
关注(0)|答案(5)|浏览(114)

我有一个要求,其中一个提交的值是“CAH 132242 F0 A”,从这我必须拿出一个日期。所以这里的“13”是年份,所以yyyy =“2013”和“224”的第一天。所以我必须提取这个并使其成为日期格式“yyyy-mm-dd”。
有人能帮我怎么做吗?

xdnvmnnf

xdnvmnnf1#

根据date/time formats上的databricks文档,这应该工作:

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

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

w8ntj3qf

w8ntj3qf2#

使用date_add两次:一次是一年,一次是一天:

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

参见live demo

prdp8dxp

prdp8dxp3#

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!)

qlvxas9a

qlvxas9a4#

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 2013-08-12

fiddle

qfe3c7zg

qfe3c7zg5#

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

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

相关问题