如何从SQL查询结果字符串的中间提取指定整数
提取SQL字符串中指定位置的整数部分
嘿,我明白你要解决的问题了——从XY_4_505543_1227_1499547620这种固定格式的字符串里,提取中间那个加粗的整数部分对吧?你之前用replace的思路卡壳是因为replace确实不支持通配符,不过咱们换几种方法就能搞定,不同的SQL数据库有对应的简便写法,我给你列出来:
方法1:MySQL 专属(最简便)
MySQL里的SUBSTRING_INDEX函数特别适合处理这种下划线分隔的字符串,咱们可以先截取前3个下划线分割的内容,再取最后一段:
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(your_column, '_', 3), '_', -1) AS extracted_number FROM your_table;
举个例子,SUBSTRING_INDEX('XY_4_505543_1227_1499547620', '_', 3)会得到XY_4_505543,再套一层SUBSTRING_INDEX(..., '_', -1)就会提取出最后一段505543。
方法2:SQL Server 专属
SQL Server可以用CHARINDEX定位下划线的位置,再用SUBSTRING截取:
SELECT SUBSTRING( your_column, -- 找到第三个下划线的位置,加1就是提取的起始点 CHARINDEX('_', your_column, CHARINDEX('_', your_column, CHARINDEX('_', your_column) + 1) + 1) + 1, -- 计算要提取的长度:第四个下划线位置减去第三个下划线位置再减1 CHARINDEX('_', your_column, CHARINDEX('_', your_column, CHARINDEX('_', your_column) + 1) + 1 + 1) - CHARINDEX('_', your_column, CHARINDEX('_', your_column, CHARINDEX('_', your_column) + 1) + 1) - 1 ) AS extracted_number FROM your_table;
这个写法虽然长,但逻辑很清晰:先依次定位第1、2、3、4个下划线的位置,然后精准截取中间的内容。
方法3:PostgreSQL 专属
PostgreSQL可以把字符串转成数组,直接取对应位置的元素:
SELECT (string_to_array(your_column, '_'))[3] AS extracted_number FROM your_table;
string_to_array会把XY_4_505543_1227_1499547620转成数组['XY', '4', '505543', '1227', '1499547620'],数组索引从1开始,所以取第3个元素就是咱们要的数字。
内容的提问来源于stack exchange,提问作者Gjack
相关产品推荐
相关产品推荐

