如何拆分SQL表中竖线分隔的id字段并提取各子值用于JSP展示?
正确SQL查询方案
原查询问题说明
你的原查询SELECT table.id FROM table WHERE table.id like 'TJ11'无法生效,是因为LIKE 'TJ11'只会匹配id完全等于'TJ11'的记录,而你的id字段是TJ11|X033|27636这种竖线分隔的格式,需要先匹配包含目标sku的记录,再拆分出三个字段。
分数据库实现方案
根据你使用的数据库类型,选择对应的SQL语句:
MySQL/MariaDB
利用SUBSTRING_INDEX函数快速拆分竖线分隔的字符串:
SELECT SUBSTRING_INDEX(`table`.id, '|', 1) AS sku, SUBSTRING_INDEX(SUBSTRING_INDEX(`table`.id, '|', 2), '|', -1) AS store, SUBSTRING_INDEX(`table`.id, '|', -1) AS car_id FROM `table` WHERE `table`.id LIKE 'TJ11|%';
SUBSTRING_INDEX(str, delim, count):按指定分隔符截取字符串,count为正数时取前N段,负数时取后N段。
SQL Server
通过CHARINDEX定位分隔符位置,结合SUBSTRING截取字段:
SELECT SUBSTRING(t.id, 1, CHARINDEX('|', t.id) - 1) AS sku, SUBSTRING( t.id, CHARINDEX('|', t.id) + 1, CHARINDEX('|', t.id, CHARINDEX('|', t.id) + 1) - CHARINDEX('|', t.id) - 1 ) AS store, SUBSTRING(t.id, CHARINDEX('|', t.id, CHARINDEX('|', t.id) + 1) + 1, LEN(t.id)) AS car_id FROM [table] t WHERE t.id LIKE 'TJ11|%';
Oracle
使用INSTR找到分隔符位置,搭配SUBSTR提取字段:
SELECT SUBSTR(t.id, 1, INSTR(t.id, '|') - 1) AS sku, SUBSTR( t.id, INSTR(t.id, '|') + 1, INSTR(t.id, '|', INSTR(t.id, '|') + 1) - INSTR(t.id, '|') - 1 ) AS store, SUBSTR(t.id, INSTR(t.id, '|', INSTR(t.id, '|') + 1) + 1) AS car_id FROM "table" t WHERE t.id LIKE 'TJ11|%';
额外提示
如果后续需要更灵活的查询或数据维护,建议将这三个字段拆分为独立的列(sku、store、car_id),避免存储复合字符串带来的性能和维护问题。
内容的提问来源于stack exchange,提问作者Emerson
相关产品推荐
相关产品推荐

