我有一个字符串返回一些静态文本来表示下一个元素的显示位置。它基本上是由一堆标签+文本值组成的连接字段,在此数据库的模式中没有其他位置。
输出看起来像
产品: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
答案 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”的末尾,然后取最右边的部分对应于字段的长度。