2015-05-11 34 views
2

我有一個字段格式DOE約翰·霍華德或DOE趙令SQL選擇得到兩個空間

我需要一個查詢來獲取兩個空間之間的字符串(JOHN在這種情況下名稱之間的字符串)。

The SO answer here展示瞭如何做到這一點時,所需子是二不同字符串之間,但我沒有看到當所需子是相同的字符串的兩個實例之間在這如何應用類似的東西(一個空間案件)。

我該怎麼做?

+0

在喬治·赫伯特·沃克·布什的情況下,你想回到什麼? –

+0

@AlexWeitzer:好的,沒有必要把政治帶入這個討論中 - 事情已經夠混亂了! :) – marky

回答

5

方式一:

select 
left(substring(fld, 
    charindex(' ', fld) + 1, len(fld)), 
    charindex(' ', substring(fld, charindex(' ', fld) + 2, len(fld)))) 
+0

謝謝,亞歷克斯。這就是訣竅! – marky

7

有,你可以做到這一點使用PARSENAME.

它的預期目的,是爲了得到一個對象/名稱空間的特定部分有點偷偷摸摸的,但是,在這種情況下,你可以通過首先用句點替換字符串來使用它。

例如,

SELECT PARSENAME(REPLACE('DOE JOHN HOWARD',' ','.'),2) 
+1

我很欣賞。這簡直太棒了。順便說一句,在我的情況下,上述接受的答案沒有奏效。但你的答案做了伎倆......謝謝。 – Denn

+1

巧妙的把戲!如果有人打算使用此功能,請首先查看PARSENAME上的文檔,它僅適用於4部分或更少的字符串。 –

0

做一些搜索,以解決我的問題後,意識到沒有通用的答案,所以下面是一段代碼,找到一些其他的字符串之間的字符串。我認爲這對未來的某個人可能有用。

DECLARE @STRING NVARCHAR(MAX) = 'Something here then stringBefore Searching stringAfter something there.' 
DECLARE @FIRST NVARCHAR(20) = 'stringBefore' 
DECLARE @SECOND NVARCHAR(20) = 'stringAfter' 
DECLARE @SEARCHING NVARCHAR (20) 

SET @SEARCHING = (SELECT SUBSTRING(@STRING, CHARINDEX(@FIRST, @STRING) + LEN(@FIRST), CHARINDEX(@SECOND, @STRING) - CHARINDEX(@FIRST, @STRING) - LEN(@FIRST))) 
-- if you want to remove empty spaces 
SET @SEARCHING = REPLACE(@SEARCHING, ' ', '') 
SELECT @SEARCHING 

然後輸出如下:

(沒有列名)

搜索