You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SQL中实现字符串分隔,用于构建IN查询条件?

直接在SQL中实现多行字符串转IN查询格式的方法

你当前用Notepad++把多行字符串(示例输入:

AAAA
BBBB
CCCC
DDDD
EEEE

)处理成'AAAA','BBBB','CCCC','DDDD','EEEE'格式用于SQL的IN查询,完全可以跳过外部工具,直接在SQL中完成这个操作。以下是主流数据库的具体实现方案:

SQL Server

1. 生成IN子句所需的字符串格式

DECLARE @input NVARCHAR(MAX) = 'AAAA
BBBB
CCCC
DDDD
EEEE';

-- 替换换行符并添加首尾单引号
SELECT '''' + REPLACE(REPLACE(@input, CHAR(13), ''), CHAR(10), ''',''') + '''';

执行后输出结果:'AAAA','BBBB','CCCC','DDDD','EEEE',可直接复制到IN子句中使用。

2. 直接整合到查询语句

无需手动拼接字符串,用STRING_SPLIT拆分后直接用于IN查询:

DECLARE @input NVARCHAR(MAX) = 'AAAA
BBBB
CCCC
DDDD
EEEE';

SELECT ID
FROM test.dbo.testtable
WHERE ID IN (
    SELECT value 
    FROM STRING_SPLIT(REPLACE(REPLACE(@input, CHAR(13), ''), CHAR(10), ','), ',')
);

MySQL

1. 生成目标字符串格式

SET @input = 'AAAA
BBBB
CCCC
DDDD
EEEE';

SELECT CONCAT('''', REPLACE(REPLACE(@input, '\r', ''), '\n', ''','''), '''');

输出结果与预期一致,可直接用于IN子句。

2. 用FIND_IN_SET替代IN子句

SET @input = REPLACE(REPLACE('AAAA
BBBB
CCCC
DDDD
EEEE', '\r', ''), '\n', ',');

SELECT ID
FROM test.dbo.testtable
WHERE FIND_IN_SET(ID, @input) > 0;

PostgreSQL

1. 生成IN子句字符串

SELECT '''' || array_to_string(string_to_array('AAAA
BBBB
CCCC
DDDD
EEEE', E'\n'), ''',''') || '''';

2. 直接用数组匹配

SELECT ID
FROM test.dbo.testtable
WHERE ID = ANY(string_to_array('AAAA
BBBB
CCCC
DDDD
EEEE', E'\n'));

内容的提问来源于stack exchange,提问作者GreyFox9881

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 03:13:11