【问题标题】:Using a keyword as an alias in Cosmos DB在 Cosmos DB 中使用关键字作为别名
【发布时间】:2020-03-17 09:13:28
【问题描述】:

我想在 SELECT 子句中使用关键字 order 作为表达式的别名。

要重现,请将以下内容插入到 Cosmos DB 集合中。

{
    "name": "John Doe"
}

以下查询工作正常

SELECT 
    c.name 
  , c["order"]    
  , c["order"] ?? "defaultValue" 
  , c["order"] ?? "defaultValue" as order2
FROM c
WHERE c.name = 'John Doe'

这个失败是因为我使用的是关键字顺序

SELECT 
    c.name 
  , c["order"]    
  , c["order"] ?? "defaultValue" 
  , c["order"] ?? "defaultValue" as order2
  , c["order"] ?? "defaultValue" as order
FROM c
WHERE c.name = 'John Doe'

我尝试过使用方括号、双引号和单引号来围绕 SQL Server 允许的别名。

【问题讨论】:

  • 您正在尝试创建一个已经是保留字的别名。我怀疑这是否可行。即使有可能,这似乎也是一种反模式,将保留字重新映射为不同的含义。
  • 您好,我的回答对您有帮助吗?

标签: azure-cosmosdb alias keyword reserved-words


【解决方案1】:

据我所知,cosmos db 只支持查询使用保留字的字段名。

SELECT c["top"] FROM c

恐怕不能在别名上使用保留字,因为它不能正确识别为流畅的SQL语句。另外,我也认为这种方式会造成歧义,在SQL中是极不推荐的。

【讨论】:

  • 为什么不能使用方括号?你是说我永远不能用关键字作为属性名?如果是这样,最好在某处出现警告。当这是已有数据的属性名称时,你会怎么做?
【解决方案2】:

有点难看,但这种语法适用于 Cosmos:

SELECT VALUE {'order':c["order"]} FROM c WHERE c.name='John Doe'

并且大致相当于常规 SQL:

SELECT c.[order] as [order] FROM c WHERE c.name='John Doe'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-03
    • 1970-01-01
    • 2016-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多