2017-04-05 29 views
1

我在表中有一個字段,其中包含要刪除的前導字符和尾隨字符。在MSSQL中結合LTRIM和RTIM和REPLACE函數

本聲明

SELECT全名AS 類別FROM dbo.inventory

在一個表(示出部分結果)產生這樣的結果:

  • 零件 - 皮帶位:Z .360J8
  • 零件 - 皮帶:Z.360J14
  • 零件 - 腰帶:Z.36355-123
  • 零件 - 塑料&框架:Z.103196-001
  • 零部件 - 電力電纜/電線:Z.P037153674

我想刪除這將刪除「部件 - 」破折號之前,一切都尾隨冒號「:」這樣我就可以將只剩類別,並得到像這樣的表:

  • 腰帶
  • 腰帶
  • 腰帶
  • 塑料&框架
  • 電力電纜/電線

我已經嘗試這樣做,成功取出了前面的「零件 - 」,但成功的結腸後,除去一切相結合的聲明「:」

SELECT LTRIM(RTRIM(REPLACE(全名, '零件 - ', '')))AS 類別FROM dbo.inventory

產生以下結果:

  • 腰帶:Z.360J8
  • 腰帶:Z.360J14
  • 腰帶:Z.36355-123
  • 塑料&框架:Z.103196-001
  • 電纜/電線:Z.P037153674

謝謝你他LP!

回答

2

使用LEFT & CHARINDEX的方法:

SELECT REPLACE(LEFT(FullName, CHARINDEX(':', FullName) - 1), 'Parts - ', '') 

CHARINDEX發現在全字符串冒號字符的索引號,-1被包括以太移除。然後LEFT將該字符串截斷到該位置。 REPLACE的功能與您在原始示例中的功能相同,刪除'Parts - '部分(注意,我在連字符後面包含空格)。

LTRIM和RTRIM分別只刪除前導/尾隨空格,所以它們在這裏不會有用。

代碼來處理不含冒號行(會返回一個空字符串):

SELECT REPLACE(REPLACE(LEFT(Fullname, CHARINDEX(':', Fullname)), 'Parts - ', ''), ':', '') 
+0

謝謝您的回覆,產生這種錯誤的語句:傳遞給LEFT或SUBSTRING函數 無效的長度參數。 當我刪除「-1」時,語句執行時沒有錯誤,但包含了冒號。 SELECT REPLACE(LEFT(全名,CHARINDEX( ':',全名)), '零件 - ', '')AS 類別 - 腰帶: - 腰帶: - 腰帶: - 塑料與框架: - 電纜/電線: –

+0

如果有沒有冒號的行,你會得到這個錯誤(有效地,位置= -1)。刪除-1可以避免出現錯誤,但可能會返回一個空白字符串給那些沒有冒號的行。如果您可以找到這些行,請發佈示例以及您希望如何處理這些行,我們可以相應地調整代碼。同時,這可以作爲一個非錯誤的解決方法:SELECT REPLACE(REPLACE(LEFT(Fullname,CHARINDEX(':',Fullname)),'Parts - ',''),':','') –

+0

結合兩個替換語句來實現結果,你讓我解決了一個問題,謝謝。 REPLACE(REPLACE(LEFT(FullName,CHARINDEX(':',FullName)),'Parts - ',''),':','') –