javascript - node-sql-parser , parser.astify(sqlquery) 不返回准确的输出

标签 javascript node.js

我正在尝试使用node-sql-parser在nodejs中解析sql查询。

const {Parser} = require('node-sql-parser');
const parser = new Parser();
const ast = parser.astify(sqlQuery)

使用的sqlery如下

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') 

在解析时得到输出

{ 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 }

我无法迭代left:[Object]。 有什么方法可以解析这个并只获取运算符列表吗?

最佳答案

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

关于查找所有运算符,您可以使用此代码


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","<>","<>"]


关于javascript - node-sql-parser , parser.astify(sqlquery) 不返回准确的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60293795/

相关文章:

javascript - 将点添加到 D3 图表

javascript - 如何暂停/停止播放音频并替换为新的音频文件

javascript - 单击 puppeteer 中包含文本的元素

Node.js:无法返回 Mongoose 查找结果

node.js - Typescript:类型 'null' 不可分配给类型错误

javascript - 页面第二次加载时无法显示加载微调图像

javascript - 如何从TexturePacker生成的JSON读取 trim Sprite 的中心?

javascript - 意外的 'delete' 返回值

node.js - 将事件绑定(bind)到所有 socket.io 连接

node.js - Nodejs Coffescript 无需翻译和咖啡命令即可执行