javascript中的sql查询解析

Posted

技术标签:

【中文标题】javascript中的sql查询解析【英文标题】:sql Query Parsing in javascript 【发布时间】:2016-06-10 11:36:35 【问题描述】:

我正在尝试创建一个 javascript 函数,用于从字符串中提取列名、表名和 where 条件,例如“Select col1, col2 from table1 where x = “123a””,我编写了以下代码来提取仅列名称,但问题是当我执行它时,结果很奇怪,它的 1,2,3,4,5 !谁能至少向我解释一下为什么我会得到这个奇怪的结果?

<!DOCTYPE html>
<html>
<head></head>
<body>

<button onclick = "MyFunc()">Try</button>
<p id = "y"></p>

<script>
function MyFunc()

var str = "select col1 , col2 from table1";
var res = str.split(" ");
var cols = [];
for (x in res)

if (x !== "select" && x !=="from")
cols.push(x);


document.getElementById("y").innerHTML=cols;

</script>

</body>
</html>

【问题讨论】:

x in 是您正在循环的数组/对象的键/索引,要获得您需要的值res[x] jsfiddle.net/n6t2z854 如果您使用浏览器控制台检查变量而不是转换为字符串并注入 HTML,您可能会更快。随时询问您需要的任何方向。 【参考方案1】:

嗯。

您可以检查它是如何工作的(只需将其粘贴到浏览器控制台中):

var columnNames = (/\bselect\b\s+([\S\s]+?)from/i.exec("select col1 , col2 from table1") || [,""])[1].split(/\s*,\s*/g);
console.log("This column names are: " + columnNames.join(","));

或创建函数:

function getColumnNames(input) 
    return (/\bselect\b\s+([\S\s]+?)from/i.exec(input) || [,""])[1].split(/\s*,\s*/g);

【讨论】:

这很完美,但是如果我想获取表名以及 where 条件怎么办? 哦,我想我明白了:D,它似乎有效: var columnNames = (/\bselect\b\s+([\S\s]+?)from/i.exec(" select col1 , col2 , col3 FROM table1 , table2 WHERE x = 1 AND y = 'BQQ';") || [,""])[1].split(/\s*,\s*/g); var tables = (/\bfrom\b\s+([\S\s]+?)where/i.exec("select col1 , col2 , col3 FROM table1 , table2 WHERE x = 1 AND y = 'BQQ';" ) || [,""])[1].split(/\s*,\s*/g); var conditions = (/\bwhere\b\s+([\S\s]+?);/i.exec("select col1 , col2 , col3 FROM table1 , table2 WHERE x = 1 AND y = 'BQQ';" ) || [,""])[1].split(/\s*,\s*/g); 请注意,您可以简单地使用console.log("This column names are: ", columnNames);。控制台比旧警报更强大。

以上是关于javascript中的sql查询解析的主要内容,如果未能解决你的问题,请参考以下文章

需要 SQL 查询帮助以解析 BigQuery 表中的 JSON 数据

Node.js具体解析

pg查询处理流程

SQL 解析在 CloudQuery 中的应用

JavaScript基礎知識

使用fuzzilli对Javascript引擎QuickJS进行Fuzzing和漏洞分析