使用日期和时间值¶
日期和时间计算是分析和数据挖掘中广泛使用的关键计算之一。本主题提供常见日期和时间查询和计算的实际示例。
加载日期和时间戳¶
本节提供了加载日期和时间戳戳值的示例,并介绍了加载这些值时与时区相关的注意事项。
加载未附加时区的时间戳¶
在以下示例中,TIMESTAMP_TYPE_MAPPING 参数设置为 TIMESTAMP_LTZ (本地时区)。TIMEZONE 参数设置为 America/Chicago 时间。如果某些传入时间戳未指定时区,则 Snowflake 将加载这些字符串,假设时间戳表示为 TIMEZONE 参数所设置时区中的本地时间。
加载已附加时区的时间戳¶
在以下示例中,TIMESTAMP_TYPE_MAPPING 参数设置为 TIMESTAMP_LTZ (本地时区)。TIMEZONE 参数设置为 America/Chicago 时间。如果某些传入的时间戳指定的时区不同,Snowflake 将以 America/Chicago 时间加载该字符串。
将时间戳转换为替代时区¶
在以下示例中,存储了一组时间戳值,没有时区数据。时间戳按 UTC 时间加载并转换为其他时区:
将有效的日期字符串插入到表的日期列中¶
此示例将值插入到 DATE 列中。
TO_DATE 函数接受 TIMESTAMP 格式中的 TIMESTAMP 值甚至字符串,但丢弃时间信息(小时、分钟等)。
如果插入仅使用时间定义的日期 DATE,则默认日期为 1970 年 1 月 1 日。
检索 DATE 值时,您可以将其格式调整为 TIMESTAMP 值:
检索当前日期和时间¶
获取当前日期作为 DATE 值:
以 TIMESTAMP 值形式获取当前日期和时间:
检索日期和星期几¶
使用 EXTRACT 函数获取当前星期几的数字:
备注
dayofweek_iso部分遵循 ISO-8601 数据元素和交换格式标准。函数返回一个 1-7 范围内的整数值,其中 1 表示星期一。为了与其他一些系统兼容,
dayofweek部分遵循 UNIX 标准。函数返回一个 0-6 范围内的整数值,其中 0 表示星期日。
使用 TO_VARCHAR 或 DECODE 函数以字符串形式获取当前星期几:
运行一个查询,返回当前日期的简短英文名称(例如:Sun、Mon 等):
运行一个查询,返回当前日期的显式提供的星期名称:
检索日期和时间部分¶
使用 DATE_PART 函数获取当前日期和时间的各种日期和时间部分。
查询本月的当前日期:
查询当前年份:
查询当前月:
查询当前小时:
查询当前分钟:
查询当前秒:
您还可以使用 EXTRACT 函数获取当前日期和时间的各种日期和时间部分。
查询本月的当前日期:
查询当前年份:
查询当前月:
查询当前小时:
查询当前分钟:
查询当前秒:
此查询返回当前日期和时间的各种日期和时间部分的表格输出:
计算业务日历日期和时间¶
使用 DATE_TRUNC 函数获取该月的第一天作为 DATE 值。例如,获取当月的第一天:
使用 DATEADD 和 DATE_TRUNC 函数获取当前月份的最后一天作为 DATE 值:
还有另一个选项,在下面的示例中,使用 DATE_TRUNC 检索当前月份的开始,加上一个月以检索下一个月的开始,然后减去一天以确定当前月份的最后一天。
获取上个月的最后一天作为 DATE 值:
获取当前月份的简短英文名称(例如:Jan、``Dec``等):
使用显式提供的月份名称获取当前月份名称:
获取本周星期一的日期:
获取本周星期五的日期:
使用 DATE_PART 函数获取当前月份第一个星期一的日期:
备注
在上面的查询中,7 + 1 中的 1 值转换为星期一。要检索第一个星期二、星期三等的日期,请分别用 2, 3 等替换,直到 7 替换 Sunday。
获取当前年份的第一天作为 DATE 值:
获取当前年份的最后一天作为 DATE 值:
获取上一年的最后一天作为 DATE 值:
获取当前季度的第一天作为 DATE 值:
获取当前季度的最后一天作为 DATE 值:
获取当天午夜的日期和时间戳:
递增日期和时间值¶
使用 DATEADD 函数递增日期和时间值。
在当前日期的基础上增加两年:
在当前日期的基础上增加两天:
在当前日期和时间的基础上增加两个小时:
在当前日期和时间的基础上增加两分钟:
在当前日期和时间的基础上增加两秒钟:
将有效的字符串转换为日期、时间或时间戳¶
在大多数用例中,Snowflake 可以正确处理格式化为字符串的日期和时间戳值。在某些情况下,例如基于字符串的比较,或者当结果依赖于与会话参数中设置的时间戳格式不同的时候,我们建议显式地将值转换为所需的格式,以避免意外的结果。
例如,在没有显式强制类型转换的情况下,比较字符串值会生成基于字符串的结果:
以下查询执行比较,但不执行显式类型转换:
以下查询执行与显式类型转换的 DATE 进行比较:
有关转换函数的更多信息,请参阅 转换函数中的日期和时间格式。
将日期算术应用于日期字符串¶
在字符串中表示的日期上增加五天:
您可以使用 DATEDIFF 函数计算当前日期与字符串中表示的日期之间的天数差:
使用 TO_TIMESTAMP 函数计算天数差:
使用 TO_DATE 函数计算天数差:
在指定日期上增加一天:
从当前日期减去九天(例如,2024 年 8 月 28 日):
计算日期或时间之间的差异¶
计算当前日期与三年内日期之间的差值:
计算当前日期与三个月后的日期之间的差值:
计算当前日期与三天后的日期之间的差值:
计算当前时间与三个小时后的时间的差值:
计算当前时间与三分钟后的时间的差值:
计算当前时间与三秒后的时间的差值: