【问题标题】:SQL Pull apart a string at specific points (based off static text strings)SQL 在特定点拆分字符串(基于静态文本字符串)
【发布时间】:2015-11-14 15:54:54
【问题描述】:

我有一个字符串返回一些静态文本来表示下一个元素将在哪里显示。它基本上是一个由一堆标签+文本值组成的连接字段,在这个数据库的架构中没有其他地方可以存在。

输出看起来像

产品: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 

【问题讨论】:

  • 您使用的是哪个 DBMS?后格雷斯?甲骨文?
  • 它是一个 PDA(Netezza 环境,IBM 纯数据分析)我敢肯定,到目前为止,我一直在使用 oracle 函数编写大部分查询,但没有任何问题

标签: sql string substring


【解决方案1】:

我不得不对字符串操作做一些类似的事情——在生成时重定向订阅。

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

    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

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

【讨论】:

  • 您需要注意添加/减去多少个字符。这个例子实际上包括“:”(冒号和空格)所以我应该稍微向前推进。
猜你喜欢
  • 2021-12-17
  • 2018-04-06
  • 1970-01-01
  • 1970-01-01
  • 2014-03-13
  • 1970-01-01
  • 1970-01-01
  • 2015-12-18
  • 1970-01-01
相关资源
最近更新 更多