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

SQL如何提取字符串中首个空格前的字符组(无需硬编码截取长度)

核心实现思路

先获取字符串中第一个空格的动态位置,再基于该位置截取前缀内容,完全不需要硬编码截取长度。

以下是不同主流数据库的实现方案:

MySQL / MariaDB

使用LOCATE()函数定位第一个空格的位置,再结合SUBSTRING()截取:

-- 基础用法
SELECT SUBSTRING('202500 135000', 1, LOCATE(' ', '202500 135000') - 1) AS ExtractString;
SELECT SUBSTRING('37500 25000', 1, LOCATE(' ', '37500 25000') - 1) AS ExtractString;

-- 兼容无空格的场景(避免截取报错)
SELECT 
  IF(LOCATE(' ', 目标字段) > 0, 
     SUBSTRING(目标字段, 1, LOCATE(' ', 目标字段) - 1), 
     目标字段
  ) AS ExtractString
FROM 你的表名;

PostgreSQL

可以用STRPOS()定位,更推荐直接用SPLIT_PART()按空格拆分取第一部分,写法更简洁:

-- 方法1:定位+截取
SELECT SUBSTRING('202500 135000' FROM 1 FOR STRPOS('202500 135000', ' ') - 1) AS ExtractString;

-- 方法2:拆分取第一部分
SELECT SPLIT_PART('202500 135000', ' ', 1) AS ExtractString;

SQL Server

使用CHARINDEX()定位空格位置:

SELECT SUBSTRING('202500 135000', 1, CHARINDEX(' ', '202500 135000') - 1) AS ExtractString;

Oracle

可以用INSTR()定位,也可以用正则函数直接匹配:

-- 方法1:定位+截取
SELECT SUBSTR('202500 135000', 1, INSTR('202500 135000', ' ') - 1) AS ExtractString FROM DUAL;

-- 方法2:正则匹配首个非空格序列
SELECT REGEXP_SUBSTR('202500 135000', '[^ ]+', 1, 1) AS ExtractString FROM DUAL;

内容的提问来源于stack exchange,提问作者Yan Kyaw Min

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 02:06:10