如何将像数字数据类型 20220401 的列值转换为雪花中的 2022-04-01

How to convert a column value which is like 20220401 of number datatype to 2022-04-01 in snowflake

我在 snowflake 中有一个数字数据类型的列,它存储像 20220401 这样的值,现在我需要将它转换成日期格式。有人可以帮忙吗

您可以使用 to_date,但它适用于 char 数据类型,因此首先需要将您的列转换为 char/string。

with data_cte(col1) as
(select 20220401::number)
select to_date(col1::string,'yyyymmdd') from data_cte
select to_date('02/14/2014', 'MM/DD/YYYY');

create table number_to_date(numbers integer);
insert into number_to_date values (20220401);
select to_date(to_char(numbers),'YYYYMMDD') from number_to_date;

更多详情:https://docs.snowflake.com/en/sql-reference/functions/to_date.html#examples

还有更多方式 seeing/saying 同样的事情:

to_date allows you to define format string

select column1 as raw_str, 
    to_date(column1, 'yyyymmdd') as as_date
from values
    ('19900101'),
    ('20220511');

给出:

RAW_STR AS_DATE
19900101 1990-01-01
20220511 2022-05-11

如果您的字符串有时不遵循您可能想要使用的格式模式 try_to_date 因为这不会产生错误:

select column1 as raw_str, 
    try_to_date(column1, 'yyyymmdd') as as_date
from values
    ('19900101'),
    ('not a date'),
    ('20220511');
RAW_STR AS_DATE
19900101 1990-01-01
not a date null
20220511 2022-05-11

但是鉴于你说的是“数字输入”

select column1 as raw_number, 
    to_date(column1::text, 'yyyymmdd') as as_date
from values
    (19900101),
    (20220511);

现在我们有数字,但 to_date 需要文本,所以我们将其转换为文本,以便可以使用解析器。

给予:

RAW_NUMBER AS_DATE
19,900,101 1990-01-01
20,220,511 2022-05-11

现在,如果您使用接受相同格式字符串的 TO_TIMESTAMP,裸数字本身会认为您指的是纪元秒,并给您古怪的小数字,例如:

select column1 as raw_number, 
    to_timestamp(column1) as as_timestamp
from values
    (19900101),
    (20220511);
RAW_NUMBER AS_TIMESTAMP
19,900,101 1970-08-19 07:48:21.000
20,220,511 1970-08-23 00:48:31.000

也就是说,通过 ::text 或类似的方式将其转换为字符串,并指定您的格式,以便您可以处理 yyyymmdd 或 yyyyddmm 或每个数据的格式。