sqlserver如何截取规格型号中的信息

类似这种:FFU01-1175x575x275-E22(I)-0-G1-D-0TL/PS/M/GM1 ,如何截取到E22(I)这个字段。涉及到的规格型号有很多。但是我要的字段基本都在第2个‘-’和第3个‘-’中间。

麻烦各位帮忙看看吧,谢谢啦

SQL 超爱冰阔落 发布于 2023-7-6 10:19 (编辑于 2023-7-6 10:25)
1min目标场景问卷 立即参与
回答问题
悬赏:0 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共3回答
最佳回答
1
Z4u3z1Lv6专家互助
发布于2023-7-6 10:22(编辑于 2023-7-6 10:49)

image.png

------------

WITH TEST AS (

SELECT 'FFU01-1175x575x275-E22(I)-0-G1-D-0TL/PS/M/GM1' A

UNION ALL

SELECT 'FFU01-1175x575x275'

)

SELECT * FROM (

SELECT *,ROW_NUMBER() OVER(PARTITION BY A ORDER BY number ASC) [I] FROM (

SELECT A.*,substring(A,b.number,charindex('-',A+'-',b.number)-b.number) as [NEW_],B.number  FROM TEST A  with(nolock),master..spt_values b with(nolock) 

where b.number>=1 and b.number<len(a.A) and b.type='P'

and substring('-'+A,number,1)='-'

) T ) T2 WHERE T2.I=3

image.png

  • 超爱冰阔落 超爱冰阔落(提问者) 不不不,还有其他规格型号,我想要的字段正好再第2个‘-’和第3个‘-’中间
    2023-07-06 10:24 
  • Z4u3z1 Z4u3z1 回复 超爱冰阔落(提问者) 对了嘛 你要先说清你的逻辑,这才提高效率嘛
    2023-07-06 10:27 
  • 超爱冰阔落 超爱冰阔落(提问者) 回复 Z4u3z1 嗯嗯,麻烦您帮忙看看有没有其他解决方法
    2023-07-06 10:40 
  • Z4u3z1 Z4u3z1 回复 超爱冰阔落(提问者) 补充在上面了
    2023-07-06 10:50 
  • 超爱冰阔落 超爱冰阔落(提问者) 回复 Z4u3z1 哇,可以了,厉害厉害!!!!
    2023-07-06 14:22 
最佳回答
1
用户k6280494Lv6资深互助
发布于2023-7-6 10:24

在帆软中用公式取吧

INDEXOFARRAY(SPLIT("FFU01-1175x575x275-E22(I)-0-G1-D-0TL/PS/M/GM1","-"),3)

最佳回答
1
CD20160914Lv8专家互助
发布于2023-7-6 10:33

select 

t.myname,

replace((SUBSTRING(replace(t.myname,'-',REPLICATE(' ',70)),140,70)),' ','') as ttt

from 

(

select

'FFU01-1175x575x275-E22(I)-0-G1-D-0TL/PS/M/GM1' as myname

) t

image.png

  • Z4u3z1 Z4u3z1 如果myname前两组不定长,且这两组的长度超过70结果就有问题
    2023-07-06 11:03 
  • CD20160914 CD20160914 回复 Z4u3z1 这个数字是随便改的。我的这个方法不可能有问题,比如设置替换 成500,再从1000开始
    2023-07-06 11:03 
  • CD20160914 CD20160914 回复 Z4u3z1 用这个方法是因为它有重复的字符的函数。都是自己设置,像这他这设置一个替换成500个空格,再从1000开始截取,怎么都够了。
    2023-07-06 11:04 
  • 超爱冰阔落 超爱冰阔落(提问者) 回复 CD20160914 这个方法可以哎!!真的厉害
    2023-07-06 14:25 
  • 3关注人数
  • 285浏览人数
  • 最后回答于:2023-7-6 10:49
    请选择关闭问题的原因
    确定 取消
    返回顶部