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

