使用UNNEST查询Couchbase数组列时遭遇语法错误求助
搞定Couchbase UNNEST查询的语法错误
嘿,我瞅了下你的查询和报错信息,这是个挺典型的N1QL语法问题,咱们一步步来解决:
为啥会报错?
报错提示syntax error - at '2018-04-21T06:37:44.512Z',问题全出在WHERE子句的写法上:
- 你把数组字段
timestamps放在了时间值后面,完全搞反了判断顺序 - 使用
BETWEEN的时候必须用AND来连接范围的两个端点,你直接漏掉了这个关键关键字 - 时间范围的顺序也错了,
BETWEEN要求左边界是更早的时间,右边界是更晚的,顺序反了不仅查不出结果,还会触发语法错误
修正后的正确查询
SELECT * FROM `alerts` UNNEST timestamps WHERE timestamps BETWEEN '2018-04-21T06:37:44.512Z' AND '2018-04-21T08:37:44.512Z';
几个关键的修正点
- BETWEEN的正确用法:N1QL里
BETWEEN的标准格式是字段名 BETWEEN 左值 AND 右值,得把要判断的字段timestamps放在最前面,然后用AND把两个时间戳连起来 - 时间顺序要对:把更早的
2018-04-21T06:37:44.512Z放在BETWEEN后面,晚的2018-04-21T08:37:44.512Z放在AND后面,这样才能匹配这个时间段内的记录 - 表名加反引号:建议用
`把表名alerts包起来,避免和N1QL的关键字冲突,写法更规范
另外,你要查alerts表原始数据的话,正确的查询应该是:
SELECT * FROM `alerts`;
内容的提问来源于stack exchange,提问作者MSD
相关产品推荐
相关产品推荐

