目录
一,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