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 如果数据中包含一个完整的时间戳值,而不仅仅是一个日期。
3条答案
按热度按时间h79rfbju1#
你可以用
TO_DATE(…)
功能治疗VARCHAR
列作为格式化的日期类型EXTRACT(…)
函数仅检索日期之外的月份。如果日期字符串的格式是众所周知的,
TO_DATE
的自动解析(或使用::
运算符)就足够了,您可以这样编写查询:或者,如果日期是非标准格式,请使用可用的格式选项
TO_DATE(…)
正确解析:注意:您还可以交换所有
DATE
以及TO_DATE
上面有TIMESTAMP
以及TO_TIMESTAMP
如果数据中包含一个完整的时间戳值,而不仅仅是一个日期。gijlo24d2#
首先,不应该将日期存储为字符串。但你可能知道。
如果将日期存储为字符串,则将它们存储为一种特定格式,例如“mm/dd/yyyy”。所以,使用
substring
函数获取月份数字。为了
'mm/dd/yyyy'
:为了
'yyyy-mm-dd'
:在许多情况下,您也可以使用
LIKE
:为了
'mm/dd/yyyy'
:为了
'yyyy-mm-dd'
:dm7nw8vv3#
你必须使用
to_date
在snowflake中将varchar数据类型转换为日期,如下所示