![](/img/trans.png)
[英]How to fetch date, month and year from column with varchar data type?
[英]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(…)
function将VARCHAR
列视为格式化的日期类型,并使用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;
注意:如果数据中包含完整的时间戳值而不仅仅是日期,您还可以将上面的所有DATE
和TO_DATE
与TIMESTAMP
和TO_TIMESTAMP
交换。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.