oraclecontains(oraclecontains函数)
本篇文章给大家谈谈oraclecontains,以及oraclecontains函数对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
oracle排除多条件
工作需求:根据不同条件查询数据,目前有下拉列表和单选按钮两种
如果只是查询具体的条件,那很简单,只需要在where 条件之后加上相应的条件即可,像这样:where type = ‘门诊’。当掘慧嫌查询的是全选或全部时,显然的就要把相应的条件给去除,如果你是使用mybatis,那也很简单,只需要在xml映射文件里加上一些判断条件,像这样:
select*from user
id=#{id}
and type=#{type}
and gender=#{gender}
但是项目中的需求往往千奇百怪,由于我的SQL语句是写在json配置文件里的,而我又使用的是mybatis框架,我没办法将SQL语句直接写在mybatis的xml映射文件里,我只有把SQL作为一个参数传递给映射文件,就像上面传递id,type,gender一样。
因为判手我传递的是一句SQL语句而不是具体条件,当我的SQL语句里出现特殊字符如比较字符时XML是会帮我转义的,我不需要XML去转义我的SQL,所以我要使用
将我的SQL语句包裹起来,这样SQL语句就不会被转义了。这里使用${ SQL }而不是#{ SQL },#将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号,$将传入的数据直接显示生成在sql中,显然我的SQL语句不需要加双引号。(这里我也先不考虑使用$会导致SQL注入的问题,后期我也会去做SQL检查)
现在背景已经明确,如果想完成需求,我只有在SQL进入XML映射文件之前,将一些条件处理掉。SQL是写在json配置文件里的,预先的条件也是写死的,如下:
"sql":"SELECT nvl(sum(a.ssrc),0) as count FROM CB_ME_YLZL a,CB_DI_DATE b,CB_DI_YLJG c,CB_DI_JZLX d WHERE a.sjid=b.sjid and a.yljgid=c.yljgid and a.jzlxid=d.jzlxid and c.yljgdj=‘3‘ and c.yljgmc = #{select1_val_select} AND type = #{radio1_val_radio}"
当用户选择全选或是全部时,我需要把
and c.yljgmc = #{select1_val_select} AND type = #{radio1_val_radio}
去掉。不是全选或全部时我需要把
#{select1_val_select} 和 #{radio1_val_radio}
替换成相应的条件。
代码碧伍如下:
/*** 处理SQL语句
*
*@paramsql
*@return
*/
public staticString dealSQL(String sql, String str) {
sql= sql.trim().toUpperCase().replaceAll(" +", " ");int form = sql.indexOf(" FROM ");
String begin= sql.substring(0, form);
begin= begin.replaceAll(" AS ", " AS C_");
String end=sql.substring(form, sql.length());
sql= begin+end;
String[] split1= str.trim().toUpperCase().replaceAll("‘", "").replaceAll("\"", "").split(",");for(String s : split1) {if(StringUtils.isNotBlank(s)) {
String[] split2= s.split(":");if(sql.contains(split2[0])) {if(split2[0].contains("VAL_RADIO") || split2[0].contains("VAL_SELECT")) {if(split2[1].equals("全选") || split2[1].equals("全部")) {
sql= removeSQL(sql,"#{"+split2[0]+"}");
}else{
sql= sql.replace("#{"+split2[0]+"}", "‘" + split2[1] + "‘");
}
}else{
sql= sql.replace("#{"+split2[0]+"}", "‘" + split2[1] + "‘");
}
}
}
}returnsql;
}
json配置文件里规定需要展现的字段都要使用as ** 作为别名,但是如果别名为数字或特殊字符的话,oracle是不认的,如果别名使用双引号引起来,orace认但json文件又不认了,所以我使用最low的办法,将所有别名加上一个C_,这样数据库就认了。
看一下 removeSQL方法:
/*** 去除SQL语句某查询条件
*@paramsql
*@paramchoice
*@return
*/
public staticString removeSQL(String sql,String choice) {int cho_first =sql.indexOf(choice);int before_and = sql.lastIndexOf(" AND ", cho_first);int before_where = sql.lastIndexOf(" WHERE ", cho_first);int after_and = sql.indexOf(" AND ", cho_first);int after_where = sql.indexOf(" WHERE ",cho_first);if(before_where != -1) {if(before_and != -1) {if(before_and before_where) {
sql= sql.replace(sql.substring(before_and, cho_first), " ").replace(choice, " ");
}else{if(after_and != -1) {if(after_where != -1) {if(after_and
sql= sql.replace(sql.substring(before_where+7, after_and+5), " ");
}else{
sql= sql.replace(sql.substring(before_where, cho_first), " ").replace(choice, " ");
}
}else{
sql= sql.replace(sql.substring(before_where+7, after_and+5), " ");
}
}else{
sql= sql.replace(sql.substring(before_where, cho_first), " ").replace(choice, " ");
}
}
}else{if(after_and != -1) {if(after_where != -1) {if(after_and
sql= sql.replace(sql.substring(before_where+7, after_and+5), " ");
}else{
sql= sql.replace(sql.substring(before_where, cho_first), " ").replace(choice, " ");
}
}else{
sql= sql.replace(sql.substring(before_where+7, after_and+5), " ");
}
}else{
sql= sql.replace(sql.substring(before_where, cho_first), " ").replace(choice, " ");
}
}
}returnsql;
}
逻辑也就是:当条件在不同地方,处理方式不同而已,下面是几种罗列的可能存在条件的地方,上面代码就是针对这些不同地方,将这些条件连同其前的and或者where(不影响其后的and条件使用的where,如下图第二条语句第一处位置的条件)去掉。(针对复杂的SQL,如使用with as 将查询数据做临时表,之后再使用select查询临时表的,这些代码是不能处理的)
[img]oracle 11g 有 CONTAINS 这个函数吗
select instrb('薯消斗百度知道','知',1,1),instr('百度知道','知',1,1) from dual;
INSTR(C1,C2[,I[,J]])
【功能数磨】在一个字符串中搜索指定的字符,返回发现指定的字符的位置;
【桥茄说明】多字节符(汉字、全角符等),按1个字符计算
【参数】
C1 被搜索的字符串
C2 希望搜索的字符串
I 搜索的开始位置,默认为1
J 第J次出现的位置,默认为1
【返回】数值
如果没有返回0,可以用这个函数判断。
在ORACLE中获得某个字元在一个字串中位置是哪个函式
在ORACLE中获得某个字元在一个字串中位置是哪个函式 select instr(字元窜s,字元a) from test;
返回字元a在字元窜s中的和稿位置
INSTR(string,set[,start [,ourrence ] ] ) 如果指定start,oracle则跳过前面所有字串到该位置开始搜寻,ourence,是强迫instr跳过前几次与字串匹配,给出下一次匹配的位置,如果ourence指定3,那就是匹配第三次的位置了。 例 instr('ABACAAA','A',2,2) 从ABACAAA中匹配A这个字串,从2个位置开始匹配,匹配第2次A所在的位置。PS:如果set中不止有一个字元而是有几个字元组成的,则INSTR给出该字符集中的第一个字元的位皮大置。
判断某个字串是否存在于某个字串中的函式是哪个啊(for delphi),急,
if Pos(SubStr, Str) 0 then 检视更多答案
满意请采纳
设计函式统计某个字元ch在一个字串s中出现的次数
int getNumber(char str[255], char ch, int len /*len是字串长度,由外界负责传入*/){
if(len 1){ return -1;}
int count = 0;
int i = 0;
for (;ilen;i++) {
if(str[i] == ch){count++;}
}
return count;
}
java中怎么判断一个字串中包含某个字元或字串
String 型的字串一旦确定就无法对其进行改变,这个时候你可呼叫各个方法来实现
比如
indexOf(x):返回字串中出现的第一个x的下标,如果没有匹配的返回-1
contains(s1):如果s1是该字串的子串,返回true。
还有很多都是String的操作,如果是字元阵列,只需回圈一下下标,挨个比较就好。
String类中有contains(CharSequence s) 当且仅当此字串包含指定的 char 值序列时,返回 true。或者使用indexOf(int ch) 返回指定字元在此字串中第一次出现处的索引。
public static void main(String[] args)
{
String str="ABC_001";
if(str.indexOf("ABC")!=-1){
System.out.println("包含");
}else{
System.out.println("不包含");
}
}
简单点可以用String类的indexOf方法
这个方法会返回某一段字串在另一个字串中第一次出现的位置,如果找不到会返回-1,找到了就返回出现位置的索引号
/*这是一个静态函式,不用宣告物件就可以用的,如你的类名为Test,在任何情况下都可以呼叫Test.isHave函式*/publicstaticbooleanisHave(String[]strs,Strings){/唤握孝*此方法有两个引数,第一个是要查询的字串阵列,第二个是要查询的字元或字串**/for(inti=0;i
/**
* Returns true if and only if this string contains the specified
* sequence of char values.
*
* @param s the sequence to search for
* @return true if this string contains codes/code, false otherwise
* @throws NullPointerException if codes/code is codenull/code
* @since 1.5
*/
public boolean contains(CharSequence s) {
return indexOf(s.toString()) -1;
}
String str = "dfdf点点滴滴";
boolean b1 = str.contains("d");
boolean b2 = str.contains("点点滴滴");
关于oraclecontains和oraclecontains函数的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。