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查询解析的主要内容,如果未能解决你的问题,请参考以下文章