2016-10-25 193 views
-1

勘定结果我试图从包含了像在SQL Server 2012

101-1*S5-04004PC0 
13-4*1.01.11 

我想在两个单独的列来获取这些值值的列PRODUCT_ID,通过*分隔提取数据。有人可以帮忙吗?

select PRODUCT_ID 
from TABLE1; 

我也有这样一些数据,这样101-1 * S5-04004PC0 * 123(意指有两个分隔符),但我只是想,当它找到的第一个左起查询分开吧*。

+2

只需使用'charindex'找到字符串'*'位置,然后用'substring' –

+0

提取部分字符串一旦你分开这些值你应该考虑让他们这样。我知道有时候我们会遗留传统代码,但是将多个值填充到单个元组中,就像这样违反了1NF,并且使用起来非常痛苦。如果可能的话修改你的桌子,所以不必一直这样做。 :) –

回答

2

你可以这样做:

select left(product_id, charindex('*', product_id + '*') - 1) as col1, 
     substring(product_id, charindex('*', product_id + '*') + 1, len(product_id)) as col2 

+ '*'是为了防止错误,如果'*'不列出现。

+0

谢谢,但我也想删除分隔符号'*' – Tanu

+0

在结果中,我看到它就像这'101-1'和'* S5-04004PC0' – Tanu

+0

谢谢,您的查询完美的作品,只需要从结果中删除'*' – Tanu

1

可以使用CHARINDEX()SUBSTRING()REVERSE做到这一点:

SELECT SUBSTRING(Product_id, charindex('*', product_id) + 1) as Col1, 
     SUBSTRING(REVERESE(Product_id), charindex('*', product_id) + 1) as Col2 
FROM TABLE1