sql—如何从varchar数据类型中日期列所在的日期获取月份使用雪花工具仅供参考

iqih9akk  于 2021-08-09  发布在  Java
关注(0)|答案(3)|浏览(459)

如何从varchar数据类型中日期列所在的日期获取月份。仅供参考使用雪花工具。例如,如果我想要6月份的数据?我怎么去拿?

h79rfbju

h79rfbju1#

你可以用 TO_DATE(…) 功能治疗 VARCHAR 列作为格式化的日期类型 EXTRACT(…) 函数仅检索日期之外的月份。
如果日期字符串的格式是众所周知的, 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 如果数据中包含一个完整的时间戳值,而不仅仅是一个日期。

gijlo24d

gijlo24d2#

首先,不应该将日期存储为字符串。但你可能知道。
如果将日期存储为字符串,则将它们存储为一种特定格式,例如“mm/dd/yyyy”。所以,使用 substring 函数获取月份数字。
为了 '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-%'
dm7nw8vv

dm7nw8vv3#

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

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

相关问题