net.sf.jsqlparser.parser.ParseException:+like和like concat()的区别?
日志报错:
-
sql:"SELECT a.* from t_user a left join t_user_org_relation b on a.id = b.user_id where a.delete_flag = 1 and b.org_id = ? and user_name like ?"%"", exception: net.sf.jsqlparser.parser.ParseException: Encountered unexpected token: "\"%\"" <S_QUOTED_IDENTIFIER> at line 6, column 33. Was expecting one of: "&" "&&" "::" ";" "<<" ">>" "AND" "COLLATE" "CONNECT" "ESCAPE" "EXCEPT" "FOR" "GROUP" "HAVING" "INTERSECT" "MINUS" "OR" "ORDER" "START" "UNION" :
like和like concat()的区别
-
模糊查询.%拼接存在错误
- 正确的:
原来的:
-
问题:
- 功能可部分实现查询,但日志打印SQL报错
-
原因:
-
问题原因:应该使用like concat
-
网上百度结果:缺少sql解析工具的jar包
-
-
解决:
-
网上解决办法:
-
引入jsqlparser依赖
-
<dependency> <groupId>com.github.jsqlparser</groupId> <artifactId>jsqlparser</artifactId> <version>4.2</version> </dependency>
-
-
-
实际解决办法:
-
MyBatis-Plus在写SQL时,like和like concat()的区别
-
like :
‘%’#{name}’%’
这样模糊查询是区分
大小写的:
-
like concat():
-
concat(’%’,#{name},’%’)
这样模糊查询是不区分
大小写的 -
如果多个字段或判断,用like
‘%’#{name}’%’
写起来不是很方便, 如果是同一个关键字,可以使用 LiKE CONCAT-
举例:
-
SELECT * FROM `user` WHERE CONCAT( NAME, age ) LIKE CONCAT( '%', '2', '%' )
-
-
-
但是请注意,这种写法,如果字段中存在null,则无法正确匹配
-
解决办法:增加 IFNULL
-
SELECT * FROM `user` WHERE CONCAT( IFNULL(name, ''), IFNULL(age, '') ) LIKE CONCAT( '%', '2', '%' )
-
SELECT * FROM `user` WHERE CONCAT( `name` ) LIKE CONCAT( '%', '2', '%' ) or CONCAT( age) LIKE CONCAT( '%', '2', '%' )
-
第三种解决办法:concat_ws函数在执行的时候,不会因为NULL值而返回NULL
-
SELECT CONCAT_WS(’,',’First name’,NULL,’Last Name’); // ‘First name,Last Name’ //mysql CONCAT_WS()不会忽略任何空字符串。 (然而会忽略所有的 NULL)。
-
-
-
-
-
总结:
-
在MyBatis-Plus中,"like"和"like concat()"都可用于构建SQL中的"like"子句,其中"like"子句用于搜索匹配指定模式的行。
-
区别在于,"like"子句的模式只能是一个常量,而"like concat()"则可以使用一个变量或函数作为模式。
-
例如,以下查询使用"like"子句搜索以"John"开头的用户名:
-
SELECT * FROM users WHERE username like 'John%';
-
如果要动态设置搜索模式,则可以使用"like concat()",例如:
-
String searchPattern = "John%"; SELECT * FROM users WHERE username like concat(#{searchPattern});
-
这样,就可以在执行查询时动态设置搜索模式。
-
总的来说,"like"和"like concat()"在功能上类似,但"like concat()"更灵活,因为可以使用变量或函数作为模式。
-
-
-
-
-