我正在构建一个模拟数据库操作的算法。
我有一个问题,我如何从DML语句中获取表名和列名?
即:
string = "SELECT id,name FROM USER_TBL"
string TABLE_NAME = getTableName(string); //this will return "USER_TBL"
array COLUMN_NAME = getColumnNames(string); //this will return ["id","name"]
如果我认为这些是字符串操作,我如何设计算法来获取表名称&列名?
目前我使用以下逻辑
function getTableName(iString){
//find string between "FROM " to next " "(space) and return it
}
function getColumnNames(string){
//get string between "SELECT " and " FROM" and split string based on "," (comma) and return it
}
我想知道有没有可用的算法(供参考)?我需要处理的是什么和所有情况?
答案 0 :(得分:0)
我不知道算法,但我想到的一些事情: 表名 - 表名可以有别名,但你的逻辑应该没问题 - 可以使用数据库名称作为前缀(dbname.tblname) - >所以你可能需要在返回字符串之前寻找点 - Tablename可以是派生表 - >括号中的select语句。在这种情况下,没有一个简单的表名派生
列名 - 列名可以有别名,不知道你想如何处理它。 - 计算,条件(情况......) - >这不仅仅是列名,而是组合或计算的值。在这种情况下,没有要检索的真实列名 - 您还可以在结果集中为单个列选择语句
总的来说,如果sql查询没有复杂性,你的方法就有效,如果是,你的逻辑可能不会返回你想要的东西。
其他语句如UPDATE和INSERT怎么样?这也是你要解析的东西吗?