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

SQL查询:获取Item列中第4个空格后的内容

SQL查询获取Item列第4个空格后的内容

现有Test表结构及数据如下:

idvalueItem
1AB CD EF GH IJ KL1 4 78 78 10 9

需求:编写SQL查询,提取Item列中第4个空格后的内容,示例中应返回'10'(对应value列的'IJ')。


你的尝试语句问题分析

你提供的SQL存在语法错误,函数嵌套逻辑混乱,既没有正确针对Item列的分割提取需求,也不符合多数SQL方言的函数调用规范。


针对不同SQL方言的解决方案

1. MySQL 8.0+

使用SUBSTRING_INDEX函数实现:

SELECT 
  SUBSTRING_INDEX(SUBSTRING_INDEX(Item, ' ', 5), ' ', -1) AS target_value
FROM Test;

解释:

  • 内层SUBSTRING_INDEX(Item, ' ', 5)截取Item列前5个空格分隔的片段(即'1 4 78 78 10')
  • 外层SUBSTRING_INDEX(..., ' ', -1)提取该片段最后一个空格后的内容,得到目标值'10'

2. PostgreSQL

利用STRING_TO_ARRAY将字符串转为数组,直接取对应索引:

SELECT 
  (STRING_TO_ARRAY(Item, ' '))[5] AS target_value
FROM Test;

解释:
STRING_TO_ARRAY(Item, ' ')将Item按空格分割为数组,PostgreSQL数组索引从1开始,第5个元素即为'10'

3. SQL Server 2016+

使用STRING_SPLIT结合行号筛选:

SELECT 
  s.value AS target_value
FROM Test
CROSS APPLY (
  SELECT value, ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS rn
  FROM STRING_SPLIT(Item, ' ')
) s
WHERE s.rn = 5;

注意:STRING_SPLIT默认不保证分割后的顺序,通过子查询添加行号可以确保取到第5个元素。

4. Oracle

使用REGEXP_SUBSTR正则提取:

SELECT 
  REGEXP_SUBSTR(Item, '[^ ]+', 1, 5) AS target_value
FROM Test;

解释:
REGEXP_SUBSTR(Item, '[^ ]+', 1, 5)表示从字符串起始位置开始,匹配第5个连续非空格的子串,即'10'


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 15:31:49