繁体   English   中英

如何从日期列为 varchar 数据类型的日期获取月份。 仅供参考使用雪花工具

[英]How to fetch month from date where date column is in varchar datatype. FYI using snowflake tool

如何从日期列为 varchar 数据类型的日期获取月份。 仅供参考使用雪花工具。 例如,如果我想要 6 月份的数据? 我怎样才能取到?

您必须在雪花中使用to_date将 varchar 数据类型转换为日期,如下所示

select *
from yourTable
where to_date(yourDateColumn, 'YYYY-MM-DD') >= '2020-06-01'
and to_date(yourDateColumn, 'YYYY-MM-DD') <= '2020-06-30'

首先,您不应该将日期存储为字符串。 但你可能知道这一点。

如果您确实将日期存储为字符串,则将它们全部存储为一种特定格式,例如“mm/dd/yyyy”。 因此,使用substring function 来获取月份数字。

对于'mm/dd/yyyy'

where substring(date_string, 1, 2) = '06'

对于'yyyy-mm-dd'

where substring(date_string, 9, 2) = '06'

在许多情况下,您还可以使用LIKE

对于'mm/dd/yyyy'

where date_string like '06%'

对于'yyyy-mm-dd'

where date_string like '%-06-%'

您可以使用TO_DATE(…) functionVARCHAR列视为格式化的日期类型,并使用EXTRACT(…) function仅检索日期之外的月份。

如果您的日期字符串以众所周知的方式格式化,则TO_DATE的自动解析(或使用::运算符的直接转换)就足够了,您可以这样编写查询:

SELECT * FROM table
WHERE
    EXTRACT(month, TO_DATE(varcharCol)) = 6     -- June of every year
AND EXTRACT(year,  varcharCol::DATE)    = 2020; -- June of 2020 alone

或者,如果日期是非标准格式, 请使用可用的格式选项使TO_DATE(…)正确解析它:

-- Dates of custom format, such as: 'June # 02 # 2020'
SELECT
    EXTRACT(month, TO_DATE(varcharCol, 'MMMM # DD # YYYY')) AS month
FROM table
WHERE
    month = 6;

注意:如果数据中包含完整的时间戳值而不仅仅是日期,您还可以将上面的所有DATETO_DATETIMESTAMPTO_TIMESTAMP交换。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM