如何在 Snowflake 中编写等效的 IF ELSE adhoc sql 查询
Posted
技术标签:
【中文标题】如何在 Snowflake 中编写等效的 IF ELSE adhoc sql 查询【英文标题】:How to write an equivalent IF ELSE adhoc sql query in Snowflake 【发布时间】:2020-10-12 21:25:20 【问题描述】:我正在尝试创建与以下基于 T-SQL 的即席查询等效的 Snowflake。
**T-SQL version**
Declare @i int = 0;
If(@i = 0)
PRINT '0';
Else
Begin
PRINT '1'
RETURN;
PRINT '2'
End
**Snowflake version**
Set i = 0;
If($i = 0)
Select '0';
Else
Begin
Select '1'
RETURN;
Select '2'
End
当我从 Snowflake Web UI 运行 Snowflake 查询时,我收到错误消息 SQL 编译错误:位置 0 处的语法错误第 1 行意外 'IF'
我搜索了雪花文档,但没有找到有用的文档:
-
否则
开始结束
返回
任何帮助将不胜感激。
谢谢。
【问题讨论】:
【参考方案1】:Snowflake 不支持条件 T-SQL 语句。它在查询中does support conditional expressions。
对于条件语句执行,如果条件表达式的使用不足以满足您的需求,请考虑使用 Snowflake 的 stored procedures with embedded javascript。
一个非常简单的存储过程示例,说明调用时执行条件查询:
CREATE OR REPLACE PROCEDURE stored_proc_example(TEST_VALUE INTEGER)
RETURNS VARCHAR
LANGUAGE JAVASCRIPT
AS
$$
// Declaring SQL statement(s) to execute later
var command_1 = "SELECT 1";
var command_2 = "SELECT 2";
if (TEST_VALUE === 0)
var stmt = snowflake.createStatement( sqlText: command_1 );
var rs = stmt.execute();
// Omitted: Perform logic with 'rs' rows to prepare a return value
return '1';
else
var stmt = snowflake.createStatement( sqlText: command_2 );
var rs = stmt.execute();
// Omitted: Perform logic with 'rs' rows to prepare a return value
return '2';
$$
;
运行方式:
SET i=0;
CALL stored_proc_example($i);
SET i=1;
CALL stored_proc_example($i);
【讨论】:
谢谢柯比。这很有帮助。【参考方案2】:在 Snowflake 中,您可以为此使用 CASE WHEN
语句。 Here's the documentation.
【讨论】:
试试作为“单级 if-then-else 表达式”的 IFF() 函数怎么样:docs.snowflake.com/en/sql-reference/functions/iff.html 类似:Set i = 1;选择 iff($i = 0, 0, 1); - 虽然我不太确定如何在您的声明中获得 2 值... @MikeDonovan 你的意思是对 OP 发表评论吗?但无论哪种方式,是的,这听起来像是这种情况下的有效选择!以上是关于如何在 Snowflake 中编写等效的 IF ELSE adhoc sql 查询的主要内容,如果未能解决你的问题,请参考以下文章
如何在 powerBi 的高级编辑器中编写 Snowflake SELECT 语句查询
如何使用 C# 为 Snowflake 编写 MS 单元测试