String jcyidsString="bb768bcb3ca649aaaaf073d0f0abe743,4bb214f612a04bb084fd2029572a6c0b,9d36289a4a99421b95cce0f6c0154b42,18351bc3fc1e4263b764767f9cdfd74d",转化为可以在mysql中 not in (#{jcyidsString})能查到不等于这四个值的数据
时间: 2024-01-22 15:20:02 浏览: 64
可以使用 MySQL 的 FIND_IN_SET 函数来实现。具体做法如下:
1. 将 jcyidsString 中的逗号替换成逗号和单引号,再在开头和结尾加上单引号,得到一个类似于 'bb768bcb3ca649aaaaf073d0f0abe743','4bb214f612a04bb084fd2029572a6c0b','9d36289a4a99421b95cce0f6c0154b42','18351bc3fc1e4263b764767f9cdfd74d' 的字符串。
可以使用以下代码实现:
```
String[] jcyids = jcyidsString.split(",");
String jcyidsInSql = "'" + String.join("','", jcyids) + "'";
```
2. 在 SQL 语句中使用 FIND_IN_SET 函数,将要查询的值和 jcyidsInSql 作为参数传入。注意,FIND_IN_SET 函数返回的是一个整数值,如果返回值为 0,则表示要查询的值不在 jcyidsInSql 中。
可以使用以下代码实现:
```
SELECT * FROM table_name WHERE FIND_IN_SET(column_name, '#{jcyidsInSql}') = 0;
```
其中,table_name 是要查询的表名,column_name 是要查询的列名。这条 SQL 语句将返回不等于 jcyidsString 中的值的所有行。
相关问题
修改代码String jcyidsString="bb768bcb3ca649aaaaf073d0f0abe743,4bb214f612a04bb084fd2029572a6c0b,9d36289a4a99421b95cce0f6c0154b42,18351bc3fc1e4263b764767f9cdfd74d",在mysql中select* from jcy_jcyxx where jcyid not in (#{jcyidsString})能查到不等于这四个值的数据
你需要将 `jcyidsString` 转换成可以在 SQL 语句中使用的格式,比如使用单引号将每个 jcyid 包裹起来,并用逗号分隔。可以使用 Java 中的 String.join() 方法来实现这个功能,代码如下:
```
String[] jcyids = jcyidsString.split(",");
String quotedJcyids = Arrays.stream(jcyids)
.map(jcyid -> "'" + jcyid.trim() + "'")
.collect(Collectors.joining(","));
String sql = "SELECT * FROM jcy_jcyxx WHERE jcyid NOT IN (" + quotedJcyids + ")";
```
这样生成的 SQL 语句就可以过滤掉 jcyid 等于 `bb768bcb3ca649aaaaf073d0f0abe743`、`4bb214f612a04bb084fd2029572a6c0b`、`9d36289a4a99421b95cce0f6c0154b42`、`18351bc3fc1e4263b764767f9cdfd74d` 的记录了。
String jcyidsString = "bb768bcb3ca649aaaaf073d0f0abe743,4bb214f612a04bb084fd2029572a6c0b,9d36289a4a99421b95cce0f6c0154b42,18351bc3fc1e4263b764767f9cdfd74d",转化为可以在mysql中 not in (#{jcyidsString})能正确匹配
可以使用 MySQL 中的 FIND_IN_SET 函数来处理这个问题。FIND_IN_SET 函数可以在逗号分隔的字符串中查找指定的值。
具体实现步骤如下:
1. 将逗号分隔的字符串转换为单引号包围的字符串,使用 REPLACE 函数替换掉逗号。
2. 使用 FIND_IN_SET 函数将结果与 0 进行比较,如果等于 0 则说明没有匹配到。
综上,可以使用以下 SQL 语句来实现:
```
SELECT * FROM table_name WHERE FIND_IN_SET(column_name, REPLACE('#{jcyidsString}', ',', "','")) = 0;
```
其中,`table_name` 是你要查询的表名,`column_name` 是你要匹配的列名,`#{jcyidsString}` 是传入的逗号分隔字符串。
阅读全文