2015-01-15 63 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()')