Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 节点sql解析器,parser.astify(sqlquery)未返回精确输出_Javascript_Node.js - Fatal编程技术网

Javascript 节点sql解析器,parser.astify(sqlquery)未返回精确输出

Javascript 节点sql解析器,parser.astify(sqlquery)未返回精确输出,javascript,node.js,Javascript,Node.js,我正在尝试使用节点sql解析器解析nodejs中的sql查询 const {Parser} = require('node-sql-parser'); const parser = new Parser(); const ast = parser.astify(sqlQuery) 使用的sqluery如下所示 SELECT * FROM SUBSCRIPTION WHERE COLUMN_1 = 'NORM' AND COLUMN_2 IN ('11','12','13','14','15',

我正在尝试使用节点sql解析器解析nodejs中的sql查询

const {Parser} = require('node-sql-parser');
const parser = new Parser();
const ast = parser.astify(sqlQuery)
使用的sqluery如下所示

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') 
其中我无法遍历左:[对象]。
有没有什么方法可以让我解析它,只得到一个操作符列表?

您将它记录为一个对象,这就是为什么您会在其中看到对象。您需要先对对象进行JSON.stringifyast,然后再进行安慰以查看所有内容

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


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



谢谢,这有助于我获得操作员列表,也有助于其他keyval

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