首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >节点-sql-解析器,parser.astify(sqlquery)没有返回准确的输出。

节点-sql-解析器,parser.astify(sqlquery)没有返回准确的输出。
EN

Stack Overflow用户
提问于 2020-02-19 05:44:04
回答 1查看 551关注 0票数 0

我试图使用节点- sql解析器来解析nodejs中的sql查询。

代码语言:javascript
复制
const {Parser} = require('node-sql-parser');
const parser = new Parser();
const ast = parser.astify(sqlQuery)

使用的面积如下

代码语言:javascript
复制
SELECT * FROM SUBSCRIPTION WHERE COLUMN_1 = 'NORM' AND COLUMN_2 IN ('11','12','13','14','15','16','17','18','42','43','44','45','101','102','103','104','128','129','130','131','159') AND (COLUMN_3 IS NOT NULL OR COLUMN_4 = 1) AND COLUMN_5 <> 1 AND (COLUMN_6 <> '8088' AND COLUMN_7 <>  '9088') 

当解析得到输出时

代码语言:javascript
复制
{ with: null,
  type: 'select',
  options: null,
  distinct: null,
  columns: '*',
  from: [ { db: null, table: 'SUBSCRIPTION', as: null } ],
  where:
   { type: 'binary_expr',
     operator: 'AND',
     left:
      { type: 'binary_expr',
        operator: 'AND',
        left: [Object],
        right: [Object] },
     right:
      { type: 'binary_expr',
        operator: 'AND',
        left: [Object],
        right: [Object],
        parentheses: true } },
  groupby: null,
  having: null,
  orderby: null,
  limit: null }

在这里,我无法遍历左边的:Object。有什么方法可以解析这个并且只得到一个操作符的列表吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-19 10:25:55

您正在将其记录为一个对象,这就是您在其中看到对象的原因。您需要在控制台查看所有内容之前对对象进行JSON.stringify(ast)

对于查找所有操作符,您可以使用以下代码

代码语言:javascript
复制
const sqlQuery = "SELECT * FROM SUBSCRIPTION WHERE COLUMN_1 = 'NORM' AND COLUMN_2 IN ('11','12','13','14','15','16','17','18','42','43','44','45','101','102','103','104','128','129','130','131','159') AND (COLUMN_3 IS NOT NULL OR COLUMN_4 = 1) AND COLUMN_5 <> 1 AND (COLUMN_6 <> '8088' AND COLUMN_7 <>  '9088')";
const {Parser} = require('node-sql-parser');
const parser = new Parser();
const ast = parser.astify(sqlQuery)

function getOperator(obj, result = []) {
  let value;
  Object.keys(obj).forEach(key => {
    value = obj[key];
    if (value instanceof Object) {
      getOperator(value, result);
    } else if (key === "operator") {
      result.push(value);
    }
  });
  return result;
}

console.log(getOperator(ast));

// output will be -  ["AND", "AND","AND","AND","=","IN","OR","IS NOT","=","<>","AND","<>","<>"]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60293795

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档