分析sql语句所有表名及其别名的正则表达式
最近为了 写一个分布式的数据组件构想了很多的方案,最近一个简单易行的方案终于在脑袋里成型。昨晚想到凌晨1点多,发现方案虽简单,但所有的数据库工具就不能使用了 。除非自己写一下查询分析器来执行程序员自己的维护语句。
说做就做,事情也出乎顺利,居然半天时间做了一个基本的版本出来了:)
于是就想想能否加上智能提示字段。似乎难在分析程序员录入的语法。当然说白了也简单就是取出表的别名。家里的空调没钱换,为了省100大元,还要晚几天才有得用。于是今晚继续晚点睡,把这个正则表达式弄出来,明天上班就能继续开发查询分析器了。
事情也没有想象的复杂,不到半小时,正则表达式整理出来了。利用下面的两个正则应就能分析出语法中的表名和其别名
\s+from\s+(\w+)\s+(\w+)\s+(where|left|join|inner) \s+join\s+(\w+)\s+(\w+)\s+on
为了测试方便我使用了Combox来保存整理出来的表达式,于是取所有表和别名的代码是这样的
DataTable table = new DataTable();
table.Columns.Add("tableName");
table.Columns.Add("aliasName");
foreach (string str in this.comboBox1.Items)
{
Regex reg = new Regex(str);
MatchCollection mces = reg.Matches(this.richTextBox1.Text);
foreach (Match mc in mces)
{
DataRow row = table.NewRow();
row["tableName"] = mc.Groups[].Value;
row["aliasName"] = mc.Groups[].Value;
table.Rows.Add(row);
}
}
this.dataGridView1.DataSource = table.DefaultView;
以下是我用于测试的sql
select * from Outvisit l
left join patient p on l.patid=p.patientid
join patstatic c on l.patid=c.patid inner join patphone ph on l.patid=ph.patid
where l.name='kevin' and exsits(select 1 from pharmacywestpas p where p.outvisitid=l.outvisitid)
unit all
select * from invisit v where
最后是我测试的小程序的截图

分析sql语句所有表名及其别名的正则表达式的更多相关文章
- 记一次JPA遇到的奇葩错误——本地sql不识别表名的别名
记一次JPA遇到的奇葩错误——本地sql不识别表名的别名 报错:Unknown column 'our' in 'field list' 起因:需要本地sql查询后,分页返回自定义对象.报错信息如下: ...
- SQL语句改动表名和字段名
今天有个暂时任务,改动生产环境的数据库表名和字段名.曾经要改动表名字段名都是在开发环境.直接打开 SQL Server找到相应的表或字段重命名就OK啦,但是这是线上数据库,再想直接F2改动是不可能的啦 ...
- postgresql 字段sql语句 更改表名
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/sq8706/article/detail ...
- postgresql sql语句 更改表名
SELECT'alter table "public"."'|| t.tablename||'"'||' rename to "'|| "l ...
- 使用explain来分析SQL语句实现优化SQL语句
用法:explain sql 作用:用于分析sql语句 mysql> explain select * from quser_1 where loginemail = "quctest ...
- mysql分析sql语句基础工具 -- explain
分析sql语句 explain explain (sql语句) G; 分析结果: id sql语句编号如果是连接查询,表之间是平等关系,编号相同:如果有子查询,编号递增. select——type 查 ...
- SQL语句 在一个表中插入新字段
SQL语句 在一个表中插入新字段: alter table 表名 add 字段名 字段类型 例: alter table OpenCourses add Audio varchar(50)alter ...
- 如何使用SQLPLUS分析SQL语句(查询执行计划跟踪)
方法一:autotrace 1, connect sys/密码 as sysdba,在sys用户下运行$ORACLE_HOME/sqlplus/admin/plustrce.sql这段sql的实际内 ...
- mysql优化(三)–explain分析sql语句执行效率
mysql优化(三)–explain分析sql语句执行效率 mushu 发布于 11个月前 (06-04) 分类:Mysql 阅读(651) 评论(0) Explain命令在解决数据库性能上是第一推荐 ...
随机推荐
- ES 集群
http://www.cnblogs.com/o-andy-o/p/5067184.html
- MyBatis复习【简单配置CRUD】
这里的案例集成了log4j的日志框架,项目架构: 用到的jar文件 添加配置文件:mybatis-config.xml 和dao层配置文件StudentDao.xml 这里书写了个简单的案例仅为了说 ...
- wsimport命令讲解
wsimport是JDK自带的工具,主要功能是根据服务端生成的WSDL文件创建客户端支持代码.生成java客户端代码常使用的命令参数说明: 参数 说明 -p 定义客户端生成类的包名称 -s 指定客户端 ...
- Android自定义控件
开发自定义控件的步骤: 1.了解View的工作原理 2. 编写继承自View的子类 3. 为自定义View类增加属性 4. 绘制控件 5. 响应用户消息 6 .自定义回调函数 一.Vie ...
- Oracle中的sql操作符 和分析函数
Oracle中的操作符算术操作符:无论是在sqlserver,或者是java中,每种语言它都有算术操作符,大同小异. Oracle中算术操作符(+)(-)(*)(/) 值得注意的是:/ 在oracle ...
- 如何把apdu[decode_len]打印出来
memcpy(data, &apdu[decode_len], apdu_len - decode_len); int i = 0; for(i=0;i<apdu_len;i ...
- Eclipse里面的一些常规设置
一.Eclipse里面的默认编码是GBK,但是Android开发的编码都是UTF-8,所以一定要修改自己的工程的编码,不要坑队友哦~ (1)选中当前的工程,点击右键,如图选择(这只是改变当前工程的编码 ...
- JavaWeb 学习007-4个页面,5条sql语句(添加、查看、修改、删除)2016-12-2
需要复习的知识: 关联查询 =================================================================================班级模块学 ...
- 开发Protege插件时,出现打开Protege后并不显示插件的原因
最近跟着导师一起开发了一个Protege插件,在按照http://www.cnblogs.com/biaoyu/archive/2011/01/07/1929715.html中所述一步步进行到最后时, ...
- 在ubuntu16编译安装nginx-1.10.2(full)完全自带组件
第一步:先安装全部用到的包 apt install gcc libpcre++-dev libssl-dev make \ libxml2-dev libxslt-dev libgd-dev libg ...