随意一条查询sql转换为查询结果集相应的数目

原思路: 像括号配对一样,假设遇见select 就入栈,假设遇见from就出栈,直到栈为空,取得此时的位置。进行字符串截取。

实现方法:遇见字符s而且连续后5个字符elect 就+1,遇见字符f而且连续3个字符为rom就-1,当计数器结果为0时,返回当前字符的位置,然后进行字符串截取就可以:

 /****
   * 获取截取位置
   * @param selectSQL
   * @return
   */
  public static  int   getSubIndex(String  selectSQL){
		System.out.println(selectSQL.length());
		int count = 0;
		for(int i=0;i<selectSQL.length();i++){
			char  c = selectSQL.charAt(i);
			if(c ==‘s‘){
				if(selectSQL.charAt(i+1)==‘e‘&&selectSQL.charAt(i+2)==‘l‘&&
				   selectSQL.charAt(i+3)==‘e‘&&selectSQL.charAt(i+4)==‘c‘&&
				   selectSQL.charAt(i+5)==‘t‘){
					count++;
					i=i+5;
				}else{
					continue;
				}
			}else if(c ==‘f‘){
				if(selectSQL.charAt(i+1)==‘r‘&&selectSQL.charAt(i+2)==‘o‘&&
				   selectSQL.charAt(i+3)==‘m‘){
	                count--;
	                i=i+3;
	            	System.out.println(count);
	    			if(count == 0){
	    				System.out.println(i);
	    				return i+1;
	    			}
				}else{
					continue;
				}
			}else {
				continue;
			}

		}
		return -1;

  }

进行字符截取操作:

  /**
   * 进行字符串截取
   * @param inSQL
   * @return
   */
  public static  String   getOutSQL(String inSQL){
	  int  index = getSubIndex(inSQL);
	  if(index != -1){
		  String outSQL  = "select count(-1) from " + inSQL.substring(index);
		  return outSQL;
	  }else{
		  System.out.println("not a  corrent sql");
		  return  "not a corrent sql";
	  }
  }
时间: 2024-10-21 02:54:50

随意一条查询sql转换为查询结果集相应的数目的相关文章

任意一条查询sql转换为查询结果集对应的数目

原思路: 像括号配对一样,如果遇见select 就入栈,如果遇见from就出栈,直到栈为空,取得此时的位置,进行字符串截取. 实现方法:遇见字符s并且连续后5个字符elect 就+1,遇见字符f并且连续3个字符为rom就-1,当计数器结果为0时,返回当前字符的位置,然后进行字符串截取即可: /**** * 获取截取位置 * @param selectSQL * @return */ public static int getSubIndex(String selectSQL){ System.o

新建一个索引能够同时提升三条SQL的查询性能

如题 CREATE TABLE `score` (   `id` int(11) NOT NULL,   `studentid` int(11) NOT NULL,   `subjectid` int(11) NOT NULL,   `score` int(11) NOT NULL,   PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- 新建一个索引能够同时提升三条SQL的查询性能 ALTER TABLE `score` AD

Oracle取查询结果数据的第一条记录SQL

Oracle取查询结果数据的第一条记录SQL: select * from (select * from <table> order by <key>) where rownum=1; select * from (select * from <table> order by <key> desc) where rownum=1;

[Oracle系列整理01]PL/SQL 基本查询与排序

本课重点:    1.写SELECT语句进行数据库查询    2.进行数学运算    3.处理空值    4.使用别名ALIASES    5.连接列    6.在SQL PLUS中编辑缓冲,修改SQL SCRIPTS    7.ORDER BY进行排序输出.    8.使用WHERE 字段. 一.写SQL 命令:      不区分大小写.      SQL 语句用数字分行,在SQL PLUS中被称为缓冲区.      最后以:或 / 结束语句.      也可以用RUN来执行语句 二.例1:

SQLAlchemy教程-第四章-SQL常用查询的ORM写法进阶2-待完善

内容预告 别名的用法 函数的用法 分组的写法. case when的用法. exists的用法 为啥要用别名? 如果两个表的两列名字相同, 那么为了区分这两列, 必须使用别名. 如果有一列是通过运算出来的, 那么一定要给这列起个名字, 否则无法在查询结果中引用. 看别名的写法. 先把代码贴上来, 然后注释我都在代码里写了, 请大家自行阅读~ (#^.^#) from models import * # 别名 def query_with_column_alias(): emps = sess.q

SQL(高级查询)

1.子查询在WHERE子句中 在SELECT查询中,在WHERE查询条件中的限制条件不是一个确定的值,而是来自于另外一个查询的结果 为了给查询提供数据而首先执行的查询语句叫做子查询 子查询嵌入在其它SQL语句中的SELECT语句,大部分出现在WHERE子句中 子查询嵌入的语句称作主查询或父查询 主查询可以是SELECT语句,也可以是其它类型的语句比如DML或DDL语句 根据返回结果的不同,子查询可分为单行子查询.多行子查询及多列子查询2.子查询在WHERE子句中(续1) 如果子查询返回多行,主查

python 3 mysql sql逻辑查询语句执行顺序

python 3 mysql sql逻辑查询语句执行顺序 一 .SELECT语句关键字的定义顺序 SELECT DISTINCT <select_list> FROM <left_table> <join_type> JOIN <right_table> ON <join_condition> WHERE <where_condition> GROUP BY <group_by_list> HAVING <havin

SQL语句汇总(三)——聚合函数、分组、子查询及组合查询 - Darly

–COUNT:统计行数量 –SUM:获取单个列的合计值 –AVG:计算某个列的平均值 –MAX:计算列的最大值 –MIN:计算列的最小值 首先,创建数据表如下: 执行列.行计数(count): 标准格式 SELECT COUNT(<计数规范>) FROM <表名> 其中,计数规范包括: - * :计数所有选择的行,包括NULL值: - ALL 列名:计数指定列的所有非空值行,如果不写,默认为ALL: - DISTINCT 列名:计数指定列的唯一非空值行. 例,计算班里共有多少学生:

sql连接查询中on筛选与where筛选的区别

sql连接查询中on筛选与where筛选的区别 sql查询这个东西, 要说它简单, 可以很简单, 通常情况下只需使用增删查改配合编程语言的逻辑表达能力,就能实现所有功能. 但是增删查改并不能代表sql语句的所有, 完整的sql功能会另人望而生畏. 就拿比普通增删查改稍微复杂一个层次的连接查询来说, 盲目使用, 也会出现意料之外的危险结果,导致程序出现莫名其妙的BUG. 在连接查询语法中,另人迷惑首当其冲的就要属on筛选和where筛选的区别了,  在我们编写查询的时候, 筛选条件的放置不管是在o