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

如何拆分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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 13:35:34