oracle数据库参数为空时 inter=0 和 like ‘ %‘区别

目录

一,oracle数据库 like语法和原理

二,oracle数据库instr函数语法和原理

三,问题:把like换成了instr,查询不到数据

         1,like ‘ %’ 的含义

2,JdbcTemplate.queryForList 



一,oracle数据库 like语法和原理

"LIKE" 是 SQL 中用于模糊匹配的操作符之一,它可以用于查询符合某些条件的数据。

语法:

SELECT column_name(s) 
FROM table_name 
WHERE column_name LIKE pattern;

其中,pattern 是模式字符串,它可以使用通配符 (% 和 _) 进行匹配,例如:

  • %:表示任意字符出现任意次数,等价于正则表达式中的 ".*"
  • _:表示任意单个字符,等价于正则表达式中的 "."

原理:

"LIKE" 操作符是通过比较目标字符串和模式字符串,判断目标字符串是否符合模式字符串的规则来完成匹配的。在比较的过程中,模式字符串中的通配符会被转化成正则表达式的语法,并进行匹配。

例如,对于模式字符串 "abc%",它会被转化成 "^abc.*$" 的正则表达式,在匹配时,目标字符串如果以 "abc" 开头,则会匹配成功。

总之,"LIKE" 操作符是通过将模式字符串转化成正则表达式,并与目标字符串进行匹配,来判断是否符合条件的。

二,oracle数据库instr函数语法和原理

INSTR函数是Oracle SQL中的一个字符串处理函数,用于在字符串中查找指定子字符串的位置。它的语法如下:

INSTR(str1, str2, [start_position], [occurrence])

其中, str1是需要查找的字符串, str2是要查找的子字符串,start_position是可选参数,表示从哪个位置开始查找,默认值为1,occurrence也是可选参数,表示查找第几次出现,若不指定,则返回第一次出现的位置。

INSTR函数的原理是通过在str1字符串中查找str2的位置,并返回其所在的下标值。若未找到str2,则返回0值。INSTR函数可以用于查找字符串中某个字符的位置,或者判断字符串中是否包含某个子串。

三,问题:把like换成了instr,查询不到数据

List params =new ArrayList();
String paramName="";//没值默认是空字符串


//源代码
sql+=" and t.name like '"+paramName+"%' ";//这个地方没有判空


//修改sql注入问题后的
sql+=" and  instr(t.name,?)=1 ";
params.add(paramName);



JdbcTemplate.queryForList(sql,params.toArray());

一切的起因是因为把like换成了instr,对于参数没有判空导致出现的异常

1,like ‘ %’ 的含义

and t.name like '%' 

正则表达式 "^.$" 的含义是匹配任意字符串。其中 "^" 表示匹配字符串的开头,"." 表示匹配任意字符(除了换行符),"" 表示匹配前面的字符零个或多个,"$" 表示匹配字符串的结尾。因此,该正则表达式可以匹配任何字符串,包括空字符串。

2,JdbcTemplate.queryForList 

方法参数参数是空字符串时不替换,不报错但是查不出任何结果

and  inster(t.name,?)=1 

你可能感兴趣的:(#,oracle,数据库,oracle)