我正在编写一个使用SQL作为输入的Web应用程序。此SQL必须始终是CREATE TABLE
语句,我的应用程序需要做的是从中获取以下属性:
示例SQL:
CREATE TABLE customer
(First_Name char(50),
Last_Name char(50),
Address char(50),
City char(50),
Country char(25),
Birth_Date date)
我不知道从哪里开始,而且我在编写这样的解析器时并不擅长。我可以使用JavaScript / jQuery的SQL解析器,还是任何示例代码?感谢。
答案 0 :(得分:2)
这不是一个完整的解决方案,但希望能帮助您入门。
您可以查看以下正则表达式:
/^CREATE\s+TABLE\s+(\S*)\s*\((.*)\)$/
这很粗糙,但应该匹配。
然后您可以拉出第一个匹配的组(假设您需要表的名称),然后是字段列表的第二个匹配组
然后,您可以在逗号上拆分字段列表以获取每个字段的信息。除此之外你可以通过匹配/^(.)\s(.)$/中的第一组来获得字段名称...你必须在解析时更有创意语句的后半部分(类型,长度,null / not null,默认,标识(1,1))但是如果你能找出总是适用的某种模式,我相信它可以完成。请注意,上面也假设空白被正确修剪,但这很容易。
答案 1 :(得分:1)
在Google Projects上有一个名为“TrimQuery”的OpenSource项目,下面是一个例子:
var selectStatement = queryLang.parseSQL("SELECT Customer.* FROM Customer");
这对一般的SQL语言有很好的支持,例如JOINS
和SELECT item.*,relation.other FROM X
希望这有帮助。
答案 2 :(得分:0)
我有一个任务要为用于SQL的Notepad ++编辑器提供提示。因此,我对数据库结构的转储进行了解析。 工作结果:https://github.com/trdm/jn-npp-scripts/blob/master/includes/IntellSql.js
使用:
var vQa = new CSqlDumpAnalizer();
vQa.setText(textSql)
vQa.parse();
vQa.printTables();