如何将像数字数据类型 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 或每个数据的格式。
我在 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 或每个数据的格式。