对于非合计的列,取出来倒是很简单,但有合计函数的我不知怎么写了。如:
SELECT 
        NVL(SUM(SALARY), 0) SALARYSUM, COUNT(DISTINCT(USERID)) USER_CNT
  FROM USER_INFO

解决方案 »

  1.   

    用“\s*(\S+)\s*,(.*FROM)”与sql匹配,匹上了就提取出group(1),然后sql=group(2)继续提取,直到匹不上,最后用“\s*(\S+)\s*FROM”把最有一列提取出来,逻辑就是这个逻辑,如果你不能保证sql里FROM都是大写的话,自己或一下吧。
      

  2.   

    用正则是科班做法,如果你只要实现功能 加个where 1=2 直接给数据库,从数据库数据字典中查,或者返回的源数据信息去查。
      

  3.   

    在stackoverflow上问了,基本都说正则做不到,我觉得也是,还是得用个sql parser,不过我的语句是带有ibatis格式的参数,不知可否,等研究出结果再来更新一下。
      

  4.   

    找了个商业版的parser, general sql parser for java,挺好用的,官网有取列名的例子,有#这样的参数标记也不影响,试用90天,够我用了。
      

  5.   

    在iteye写了个bloghttp://theoffspring.iteye.com/admin/blogs/1442316