2011-12-09 43 views
1

獲取varchar的最後一個單詞的正確方法是什麼?獲取varchar的一部分的最後一個單詞(左/右)

DECLARE @desc varchar(100) 
SET @desc='EXCHANGEUNIT P1i/SILVERBLACK/ CYRILLIC' 

SELECT RTRIM(LEFT(@desc, CHARINDEX('/', @desc) - 1)) 

這將返回:EXCHANGEUNIT P1i

我需要只P1i與查詢。

在此先感謝。

+2

有沒有 「正確」 的方式。你的數據總是這樣的:「ValueSpaceValueSpaceSlashSpaceValueSpaceSlashSpaceValue」 – gbn

+0

不,我會很高興,如果有人能夠展示從'EXCHANGEUNIT P1i/SILVERBLACK/CYRILLIC'獲得'P1i'的最快方式。實際上,不能保證有''''或尾隨空間或空間。但這是查詢的「where」條件的一部分。我已將查詢簡化爲在嚴格指定的條件下將varchar值分隔爲另一個varchar值的問題。 –

+1

@MarkBannister給出了一個適用於您的示例數據的答案。在這種情況下,並非所有數據都符合該格式,請您包括所有可能的角落案例的例子嗎?和/或關於被解析的字符串的自然規則的硬性規則? – MatBailie

回答

6

運用逆向,左,CHARINDEX的組合 - 像這樣:

DECLARE @desc varchar(100) 
SET @desc='EXCHANGEUNIT P1i/SILVERBLACK/ CYRILLIC' 
SET @subdesc=RTRIM(LEFT(@desc, CHARINDEX('/', @desc) - 1)) 


SELECT REVERSE(LEFT(REVERSE(@subdesc), CHARINDEX(' ', REVERSE(@subdesc))-1)) 
+0

謝謝。這就是我一直在尋找的東西。看起來很奇怪,如果我將兩者結合起來並將其添加到另一個查詢的group by子句中。但這是一條路。 –

+0

@Dems:我意識到這對於在'/'(例如'W200I_E/Swap unit/Black')之前的第一部分中根本沒有空白的「正常」情況不起作用。根據'/'之前是否存在空格,如何改變我的方法和你的查詢之間的查詢?我唯一可以確定的就是'/',因爲那也是'where'子句的一部分。 –

+0

@Tim:問題是,你還沒有正確定義要解決的問題;你只包括一個例子。所以我們不知道在第一個'/'之前是否總會有至少一個單詞,不管在第一個'/'之前是否會有空格,是否要使用任何其他字符作爲單詞分隔符(例如如逗號,冒號,選項卡......)等。 –

相關問題