SQL在特定点拉出一个字符串(基于静态文本字符串)

时间:2015-08-20 20:32:43

标签: sql string substring

我有一个字符串返回一些静态文本来表示下一个元素的显示位置。它基本上是由一堆标签+文本值组成的连接字段,在此数据库的模式中没有其他位置。

输出看起来像

  

产品:productname公司:productcompany类型:producttype网站:productsite

任何这些都可能是空白,但Product:/ Company:/ Type:/ Site:的“标签”将始终存在。我想撕掉字符串,这样我就可以创建每个字符串。

我相信我可以在这里做子串,但我没有成功地正确拉开弦。

我试过的一些事情没有成功!

select 
impl_nm,
instr(impl_nm, 'Product:', 1,1)+1 as Start,
instr(impl_nm, 'Company:', 1, 2) as End
--substr(val, instr(impl_nm, 'Product: ', 1,1) + 1, decode(instr(impl_nm, 'Company:',1,2),0,length(impl_nm)+1,instr(impl_nm, 'Company:',1,2) ) - instr(impl_nm, 'Product: ', 1,1)-1 )    
from products 

1 个答案:

答案 0 :(得分:0)

我必须做一些与字符串操作类似的事情 - 在生成时重定向订阅。

决定不通过标记放弃整个扫描 - 基本解决方案是:

    Select right(left(impl_nm,Charindex( 'Company:',impl_nm, 1)-1),len(charindex( 'Company:',impl_nm, 1))-Charindex(left(impl_nm,Charindex('Company:',impl_nm, 1)), 'Product:',1)  +len('Product:')+1)
,left(impl_nm,Charindex( 'Company:',impl_nm, 1)-1)
from (select 'Product: Sometext Company: somemoretext' impl_nm) c

基本上将字符串截断到下一个字段名称“Company”的末尾,然后取最右边的部分对应于字段的长度。