Запрос столбца массива couchbase

MSD спросил: 28 марта 2018 в 01:52 в: arraylist

Я пытаюсь запросить столбец массива в couchbase с помощью UNNESt. Но получить следующую ошибку.

Запрос:

SELECT FROM alerts UNNEST отметки времени WHERE timestamps'2018-04-21T06: 37: 44.512Z 'BETWEEN' 2018-04-21T08: 37: 44.512Z '

Ошибка messgae:

[
  {
    "code": 3000,
    "msg": "syntax error - at '2018-04-21T06:37:44.512Z'",
    "query_from_user": "SELECT * FROM `alerts` UNNEST timestamps WHERE timestamps '2018-04-21T06:37:44.512Z'  BETWEEN '2018-04-21T08:37:44.512Z'"
  }
]

Содержимое таблицы: предупреждения SELECT FROM' ";

[
  {
    "alerts": {
      "alertid": "3c217a81450278b38f3ad1a7260955d4",
      "severity": 3,
      "tally": 540,
      "timestamps": [
        "2018-04-21T07:37:44.512Z"
      ],
      "type": "ALERTS"
    }
  }
]

1 ответ

Есть решение
Matthew Groves ответил: 28 марта 2018 в 03:44

Я не уверен, какие именно результаты вы пытаетесь получить, но прежде всего я вижу синтаксическую ошибку: я предполагаю, что вы пытаетесь найти что-то между двумя датами, но у вас есть литерал даты , затем BETWEEN затем другой литерал даты. Это не правильный синтаксис. Это было бы больше похоже на BETWEEN <literal> AND <literal>.

Мое первое предположение, поскольку вы пытаетесь UNNEST, возможно, вы пытаетесь выполнить кросс-соединение внутри документа , возвращая продукт объединения с временными метками, которые вписываются в диапазон, что вы можете сделать следующим образом:

SELECT a.*, t
FROM alerts a
UNNEST a.timestamps t
WHERE t BETWEEN '2018-04-21T06:37:44.512Z' AND '2018-04-21T08:37:44.512Z';

Следующее мое предположение заключается в том, что если вы пытаетесь найти все документы оповещений если любая из отметок времени находится в определенном диапазоне, это будет работать:

SELECT a.*
FROM alerts a
WHERE 
   ANY x IN a.timestamps
   SATISFIES (x BETWEEN '2018-04-21T06:37:44.512Z' and '2018-04-21T08:37:44.512Z')
END;

Надеюсь, один из этих двух ответов подойдет вашим потребностям.