如何在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
相关产品推荐
相关产品推荐

