上下文函数

此系列函数允许收集有关执行语句的上下文的信息。这些函数在每个语句中最多计算一次。

函数列表

使用说明

  • Context functions generally do not require arguments (except for SYS_CONTEXT).

  • 为符合 ANSI 标准,在 SQL 语句中,可以在不带括号的情况下调用以下上下文函数:

    • CURRENT_DATE

    • CURRENT_TIME

    • CURRENT_TIMESTAMP

    • CURRENT_USER

    • LOCALTIME

    • LOCALTIMESTAMP

    备注

    如果要将 Snowflake Scripting 变量 设置为调用这些函数之一的表达式(例如,my_var := <function_name>();),则必须包含圆括号。

示例

显示会话的当前仓库、数据库和架构:

SELECT CURRENT_WAREHOUSE(), CURRENT_DATABASE(), CURRENT_SCHEMA();
+---------------------+--------------------+------------------+
| CURRENT_WAREHOUSE() | CURRENT_DATABASE() | CURRENT_SCHEMA() |
|---------------------+--------------------+------------------+
| MY_WAREHOUSE        | MY_DB              | PUBLIC           |
|---------------------+--------------------+------------------+

显示当前日期、时间和时间戳(请注意,调用这些函数时不需要使用括号):

SELECT CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP;
+--------------+--------------+-------------------------------+
| CURRENT_DATE | CURRENT_TIME | CURRENT_TIMESTAMP             |
|--------------+--------------+-------------------------------|
| 2024-06-07   | 10:45:15     | 2024-06-07 10:45:15.064 -0700 |
+--------------+--------------+-------------------------------+

在 Snowflake Scripting 块中,调用不带括号的 CURRENT_DATE 函数以设置 SQL 语句中的变量:

EXECUTE IMMEDIATE
$$
DECLARE
  currdate DATE;
BEGIN
  SELECT CURRENT_DATE INTO currdate;
  RETURN currdate;
END;
$$
;
+-----------------+
| anonymous block |
|-----------------|
| 2024-06-07      |
+-----------------+

在 Snowflake Scripting 块中,尝试将变量设置为调用不带括号的 CURRENT_DATE 函数的表达式将导致错误:

EXECUTE IMMEDIATE
$$
DECLARE
  today DATE;
BEGIN
  today := CURRENT_DATE;
  RETURN today;
END;
$$
;
000904 (42000): SQL compilation error: error line 5 at position 11
invalid identifier 'CURRENT_DATE'

同一个块返回调用函数时的当前日期,并带有括号:

EXECUTE IMMEDIATE
$$
DECLARE
  today DATE;
BEGIN
  today := CURRENT_DATE();
  RETURN today;
END;
$$
;
+-----------------+
| anonymous block |
|-----------------|
| 2024-06-07      |
+-----------------+