CosmosDB SQL if 语句的查询语法
CosmosDB SQL query syntax for if statement
我试图找到在 Azure ComsmosDB SQL 查询中执行 If/Case 类型语句的正确语法。这是我的文件
{
"CurrentStage": "Stage2",
"Stage1": {
"Title": "Stage 1"
},
"Stage2": {
"Title": "Stage 2"
},
"Stage3": {
"Title": "Stage 3"
}
}
我想做的是创建一个类似于
的查询
Select c.CurrentStage,
if (CurrentStage == 'Stage1') { c.Stage1.Title }
else if (CurrentStage == 'Stage2') { c.Stage2.Title }
else if (CurrentStage == 'Stage3') { c.Stage3.Title } as Title
From c
显然我拥有的文档和查询比这个复杂得多,但这让您大致了解我正在尝试做什么。 select 中有 1 个字段根据文档中的其他一些字段可变。
我建议您在 Cosmos DB 中使用 User Defined Function。
udf代码:
function stage(c){
switch(c.CurrentStage){
case "Stage1" : return c.Stage1.Title;
case "Stage2" : return c.Stage2.Title;
case "Stage3" : return c.Stage3.Title;
default: return "";
}
}
SQL :
Select c.CurrentStage,
udf.stage(c) as Title
From c
输出结果:
希望对你有帮助。
如果您需要大量重用此函数,虽然 Jay Gong 建议的 udf 可能更易于使用,但您可以使用三元运算符语法在没有 udf 的情况下执行此操作。
例如:
select
c.CurrentStage = 'stage1' ? c.Stage1.Title
: c.CurrentStage = 'stage2' ? c.Stage2.Title
: c.CurrentStage = 'stage3' ? c.Stage3.Title
: 'your default value should you wish one'
as title
from c
建议:Provider SQL 解决方案优于 UDF,因为它是独立的,不需要在执行前在服务器上设置逻辑。另外请注意,如果逻辑完全存储在客户端应用程序中,而不是像 UDF 情况下那样在客户端和服务器之间共享,则逻辑版本控制会更简单。 UDF 确实有它的用途(例如:跨查询的大量重用),但通常最好不要使用。
我试图找到在 Azure ComsmosDB SQL 查询中执行 If/Case 类型语句的正确语法。这是我的文件
{
"CurrentStage": "Stage2",
"Stage1": {
"Title": "Stage 1"
},
"Stage2": {
"Title": "Stage 2"
},
"Stage3": {
"Title": "Stage 3"
}
}
我想做的是创建一个类似于
的查询 Select c.CurrentStage,
if (CurrentStage == 'Stage1') { c.Stage1.Title }
else if (CurrentStage == 'Stage2') { c.Stage2.Title }
else if (CurrentStage == 'Stage3') { c.Stage3.Title } as Title
From c
显然我拥有的文档和查询比这个复杂得多,但这让您大致了解我正在尝试做什么。 select 中有 1 个字段根据文档中的其他一些字段可变。
我建议您在 Cosmos DB 中使用 User Defined Function。
udf代码:
function stage(c){
switch(c.CurrentStage){
case "Stage1" : return c.Stage1.Title;
case "Stage2" : return c.Stage2.Title;
case "Stage3" : return c.Stage3.Title;
default: return "";
}
}
SQL :
Select c.CurrentStage,
udf.stage(c) as Title
From c
输出结果:
希望对你有帮助。
如果您需要大量重用此函数,虽然 Jay Gong 建议的 udf 可能更易于使用,但您可以使用三元运算符语法在没有 udf 的情况下执行此操作。
例如:
select
c.CurrentStage = 'stage1' ? c.Stage1.Title
: c.CurrentStage = 'stage2' ? c.Stage2.Title
: c.CurrentStage = 'stage3' ? c.Stage3.Title
: 'your default value should you wish one'
as title
from c
建议:Provider SQL 解决方案优于 UDF,因为它是独立的,不需要在执行前在服务器上设置逻辑。另外请注意,如果逻辑完全存储在客户端应用程序中,而不是像 UDF 情况下那样在客户端和服务器之间共享,则逻辑版本控制会更简单。 UDF 确实有它的用途(例如:跨查询的大量重用),但通常最好不要使用。