2015-01-15 61 views
1

我试图从我的数据中找到一个子字符串。在T-SQL中修剪左边的一个字符

提交的永远是这种格式的数据的格式:

  • supplierName - [PropRef]
  • 例如“AJ考克斯 - [SCOOPPP0000594]”

我从字符串需要的是方括号中的数字(propRef),我知道我需要先找到CHARINDEX“ - ”,然后用替换方括号没有什么,但我不确定如何做到这一点。

任何意见,将不胜感激

回答

2

如果 '[' 和 ']' 字符是分隔符,那么就使用它们:

DECLARE @SupplierName NVARCHAR(50) = 'A J Cox - [SCOOPPP0000594]' 
SELECT SUBSTRING(@SupplierName, 1 + CHARINDEX('[', @SupplierName), CHARINDEX(']', @SupplierName) - CHARINDEX('[', @SupplierName) - 1) 
+0

完美,非常感谢 – joeMarsden 2015-01-15 15:57:22

+0

无需使用'CHARINDEX(']',@SupplierName)''CHARINDEX'搜索字符串,但你已经知道它在哪里(在最后)。使用LEN更有效一些。 – Fred 2015-01-15 16:11:03

+0

Fred很正确! – SimonJ 2015-01-15 16:33:10

0

喜欢的东西(假设MSSQL)的字符串

SELECT 
    SUBSTRING('A J Cox - [SCOOPPP0000594]', 
      CHARINDEX('[', 'A J Cox - [SCOOPPP0000594]') + 1, 
      LEN('A J Cox - [SCOOPPP0000594]') - (CHARINDEX('[', 'A J Cox - [SCOOPPP0000594]') + 1) 
      ) 

或者

SELECT 
    SUBSTRING(YourFieldName, 
      CHARINDEX('[', YourFieldName) + 1, 
      LEN(YourFieldName) - (CHARINDEX('[', YourFieldName) + 1) 

少了一个CHARINDEX,少了一个搜索!

0

XML可以很好的工作太:

DECLARE @SupplierName NVARCHAR(50) = 'A J Cox - [SCOOPPP0000594]' 
SELECT CAST(REPLACE(replace(@SupplierName,'[','<sup>'),']','</sup>') AS XML).query('//sup/text()')