sql截取某字段中固定格式的部分

举例:取type字段里,“位置_ ”这个后面的信息,比如王府井,合生汇,银座
如果位置后面没有,和品牌信息呢
图片说明

SELECT SUBSTR(type FROM LOCATE('位置_',type)+3 FOR LOCATE(',品牌',type)-(LOCATE('位置_',type)+3) );

+3 是下标+3,因为返回的是 “位置_”的下标,实际我们需要的是 前进3位 “王府井”的开始下标

如果后面没有,和另一个字段,要怎么取呢

SELECT SUBSTR(type FROM LOCATE('位置_',type)+3 FOR LENGTH(type) );

tip :数据量大的话,这样用,会被打死哦

选择出type字段,type.Replace("位置_”,"" )

substring(instr(type,'位置_') + 3, instr(type,'.') - (instr(type,'位置_')+3) )

sqlserver

SUBSTRING(content,CHARINDEX('位置_',content)+3,CHARINDEX(',',content,CHARINDEX('位置_',content))-CHARINDEX('位置_',content)-3)

SELECT * FROM type WHERE cType like '%位置_%' 将需要的数据选取出来,图片说明拷贝选取出来的所有内容到.txt文件中,用制表符替换“,”和"位置_",再将替换后的内容拷贝到Excel中就可以得到需要的内容,图片说明

全sql语句查
查非末尾位置的
select SUBSTRING(cType,instr(cType,'位置_') + 3, instr(cType,',品牌') - instr(cType,'位置_')+3) from type WHERE cType LIKE '%,品牌'

查末尾位置的
select SUBSTRING(cType,instr(cType,'位置_') + 3, CHAR_LENGTH(cType) - instr(cType,'位置_') + 3) from type WHERE cType NOT LIKE '%,品牌'

还是数据库自带函数掌握的太少了,给你普及一个函数

SUBSTRING_INDEX(str,delim,count)

详细的讲解可以自己去百度,上面介绍的也蛮详细的。

select SUBSTRING_index(SUBSTRING_index('城市_北京.位置_王府井.品牌_JNBY','位置_',-1),'.品牌',1) union all
select SUBSTRING_index(SUBSTRING_index('位置_王府井.品牌_ABC','位置_',-1),'.品牌',1) union all
select SUBSTRING_index(SUBSTRING_index('城市_山东.位置_银座.品牌_BCD','位置_',-1),'.品牌',1);

上面是我测试的代码。
结果贴个图吧。
图片说明