Operátory Ternary a coalesce ve službě Azure Cosmos DB for NoSQL
PLATÍ PRO: NoSQL
Operátory Ternary a coalesce ve službě Azure Cosmos DB for NoSQL vyhodnocují výrazy a vrací výsledek v závislosti na logickém operandu nebo v případě, že pole existuje. Ternární i coalesce operátory fungují podobně jako oblíbené programovací jazyky, jako jsou C# a JavaScript. Pomocí ternárních operátorů (?
) a coalesce (??
) můžete vytvářet podmíněné výrazy odolné vůči částečně strukturovaným nebo smíšeným datům.
Ternární operátor
Operátor ?
vrátí hodnotu v závislosti na vyhodnocení prvního výrazu.
Syntaxe
<bool_expr> ?
<expr_true> :
<expr_false>
Argumenty
Popis | |
---|---|
bool_expr |
Logický výraz. |
expr_true |
Výraz, který se má vyhodnotit, pokud bool_expr se vyhodnotí jako true . |
expr_false |
Výraz, který se má vyhodnotit, pokud bool_expr se vyhodnotí jako false . |
Příklady
Zvažte tyto položky v kontejneru. Obsahují více vlastností metadat souvisejících s cenami a jedna z vlastností neexistuje u všech položek.
[
{
"name": "Stangincy trekking poles",
"price": 24.50,
"onCloseout": false,
"onSale": true,
"collapsible": true
},
{
"name": "Vimero hiking poles",
"price": 24.50,
"onCloseout": false,
"onSale": false
},
{
"name": "Kramundsen trekking poles",
"price": 24.50,
"onCloseout": true,
"onSale": true,
"collapsible": false
}
]
Tento dotaz vyhodnotí výraz onSale
, který je ekvivalentní onSale = true
. Dotaz pak vrátí cenu vynásobenou 0.85
cenou, pokud true
se cena nezmění, pokud false
.
SELECT
p.name,
p.price AS subtotal,
p.onSale ? (p.price * 0.85) : p.price AS total
FROM
products p
[
{
"name": "Stangincy trekking poles",
"subtotal": 24.5,
"total": 20.825
},
{
"name": "Vimero hiking poles",
"subtotal": 24.5,
"total": 24.5
},
{
"name": "Kramundsen trekking poles",
"subtotal": 24.5,
"total": 20.825
}
]
Můžete také vnořit volání operátora ?
. Tento příklad přidá výpočet navíc na základě druhé vlastnosti (taxFree
)
SELECT
p.name,
p.price AS subtotal,
p.onCloseout ? (p.price * 0.55) : p.onSale ? (p.price * 0.85) : p.price AS total
FROM
products p
[
{
"name": "Stangincy trekking poles",
"subtotal": 24.5,
"total": 20.825
},
{
"name": "Vimero hiking poles",
"subtotal": 24.5,
"total": 24.5
},
{
"name": "Kramundsen trekking poles",
"subtotal": 24.5,
"total": 13.475000000000001
}
]
Stejně jako u jiných operátorů dotazu operátor vyloučí položky, ?
pokud odkazované vlastnosti chybí nebo jsou porovnávané typy odlišné.
Operátor Coalesce
??
Operátor slouží k efektivní kontrole vlastnosti v položce při dotazování na částečně strukturovaná nebo smíšená data typu.
Tento dotaz například předpokládá, že jakákoli položka, ve které není vlastnost collapsible
, není sbalitelná.
SELECT
p.name,
p.collapsible ?? false AS isCollapsible
FROM
products p