【问题标题】:How to get column_name and table_name from DML statement?如何从 DML 语句中获取 column_name 和 table_name?
【发布时间】:2016-02-10 13:47:50
【问题描述】:

我正在构建一种算法来模拟数据库操作。

我有一个问题,如何从 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
}

我想知道是否有任何可用的算法(供参考)?除了这些,我还需要处理什么以及所有的情况?

【问题讨论】:

    标签: javascript java sql node.js algorithm


    【解决方案1】:

    我不知道算法,但我想到了一些事情: 表名 - 表名可以有别名,但你的逻辑应该没问题 - 可以以数据库名称 (dbname.tblname) 为前缀 -> 因此您可能需要在返回字符串之前查找点 - 表名可以是派生表 --> 括号中的选择语句。在那种情况下,实际上并没有一个简单的表名派生

    列名 - 列名可以有别名,不知道你想如何处理。 - 计算,条件(Case when ...)怎么样-->这不仅仅是一个列名,而是一个组合或计算的值。在这种情况下,没有要检索的真实列名 - 您还可以选择结果集中单个列的语句

    所以总的来说,如果 sql 查询没有复杂性,你的方法是有效的,如果是,你的逻辑可能不会返回你想要的。

    其他语句呢,例如 UPDATE 和 INSERT?这也是你要解析的东西吗?

    【讨论】:

    • 感谢#bdifferent 提供用户案例列表。即使我想到了其中的一些。那么你知道 SQLite 插件是如何在内部处理它的吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-08
    • 1970-01-01
    • 1970-01-01
    • 2020-02-24
    • 2013-02-10
    • 2022-01-12
    相关资源
    最近更新 更多