开发者社区> 问答> 正文

列名映射需求

对于一个指定的sql,输入的列名在指定映射后需要替换成另外一个列名。 例如select a from t,输入a->b的映射,sql变为select b from t。 希望8月底前能完成。

原提问者GitHub用户stepenelope

展开
收起
山海行 2023-07-05 20:47:00 35 0
4 条回答
写回答
取消 提交回答
  • 要实现列名的映射需求,您可以按照以下步骤进行操作:

    1. 使用Druid的SQL解析器将原始的SQL语句解析成一个SQL语句树。

    2. 遍历SQL语句树,查找所有的SELECT语句,并对每个SELECT语句中的列名进行替换。例如,如果有一个映射关系为a->b,那么需要将SELECT a FROM t中的a替换为b。

    3. 将修改后的SQL语句树转换回字符串形式的SQL语句。

    4. 使用Druid的数据库连接池执行修改后的SQL语句。

    在具体实现时,您可以参考Druid的相关文档和示例代码来了解如何使用Druid的SQL解析器和连接池。请注意,这种方法只能替换SQL语句中的列名,不能替换表名或其他SQL元素。同时,如果SQL语句中存在多个相同的列名,替换操作可能会替换所有的列名,可能会导致错误的结果。

    2023-07-30 14:14:27
    赞同 展开评论 打赏
  • 北京阿里云ACE会长

    如果您想在给定的SQL语句中替换列名,可以使用字符串替换的方式实现。具体来说,您可以使用Java中的String类提供的replace方法,将指定的列名替换为另一个列名。
    这种方式只能替换SQL语句中的列名,不能替换表名或其他SQL元素。另外,如果SQL语句中存在多个相同的列名,替换操作可能会替换所有的列名,这可能会导致不正确的结果。

    2023-07-30 13:26:22
    赞同 展开评论 打赏
  • 首先,使用Druid的SQL解析器将原始的SQL语句解析成一个SQL语句树。
    然后,遍历SQL语句树,将所有的SELECT语句中的列名替换成指定的映射名称。例如,如果指定的映射为a->b,那么需要将SELECT a FROM t中的a替换成b。
    最后,将修改后的SQL语句树转换成一个SQL语句,并使用Druid的数据库连接池执行该SQL语句。
    
    2023-07-11 10:18:00
    赞同 展开评论 打赏
  • 问题已修复,请用新版本 https://github.com/alibaba/druid/releases/tag/1.1.14

    具体使用方法,请看相关的testcase代码

    原回答者GitHub用户wenshao

    2023-07-06 11:45:38
    赞同 展开评论 打赏
问答分类:
SQL
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载