【发布时间】:2010-06-26 01:17:06
【问题描述】:
我有一个表示 SQL 查询的字符串,我需要从该字符串中提取表的名称。例如:
SELECT * FROM Customers
将返回“客户”。或者
SELECT * FROM Customers c, Addresses a WHERE c.CustomerName='foo'
SELECT a.AddressZip FROM Customers c
INNER JOIN Addresses a ON c.AddressId=a.AddressId
将返回“客户、地址”。更高级:
(SELECT B FROM (SELECT C FROM (SELECT Element AS C FROM MyTable)))
只会返回“MyTable”
(注意,我可能打错了查询,但你明白了)。
最好/最准确的方法是什么?
【问题讨论】:
-
问题“为什么?”浮现在脑海中......
-
您是否针对任何特定的 RDBMS/方言?关于解析 SQL 有一些关于 SO 的问题,例如stackoverflow.com/questions/589096/parsing-sql-code-in-c 虽然我没有看到任何特别的结论。
-
至于“为什么”是因为我正在解析查询日志文件并显示访问次数最多的表、操作等。这并不重要:) 至于我的目标是什么,它是 MS-SQL。
-
@esac:这很重要。因为有时人们会发布关于问题解决方案细节的问题,而不是实际问题本身。
-
@jpaugh 大约 25 年前,当我还是个小男孩时,我选择了这个网名。当时市场上刚刚出现了一个名为“Red Hat”的新 Linux 发行版。我几乎只使用了 5 年的 Linux,然后我找到了一份工作,进入了 Windows 计算机的商业世界。