SQL select 得到两个空格之间的字符串

SQL select to get a string between two spaces

我有一个名称格式为 DOE JOHN HOWARD 或 DOE JOHN H 的字段。

我需要一个查询来获取两个 space 之间的字符串(在本例中为 JOHN)。

The SO answer here 展示了当所需的子字符串位于两个 different 字符串之间时如何执行此操作,但我不知道如何在所需的子字符串时应用类似的东西在同一字符串的两个实例之间(在本例中为 space)。

我该怎么做?

一种方式:

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

使用 PARSENAME.

可以使用一种偷偷摸摸的方法

它的预期目的是获取 object/namespace 的特定部分,但是,在这种情况下,您可以先用句点替换字符串来使用它。

例如,

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

在进行了一些搜索以解决我的问题后,我意识到没有通用的答案,因此下面是一段代码,用于在其他一些字符串之间查找字符串。我认为它可能对将来的某人有用。

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

则输出如下:

(无列名)

正在搜索