【问题标题】:SQL select to get a string between two spacesSQL select获取两个空格之间的字符串
【发布时间】:2015-07-22 05:38:56
【问题描述】:

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

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

The SO answer here 展示了当所需的子字符串在两个 不同的 字符串之间时如何做到这一点,但是当所需的子字符串在相同的两个实例之间时,我看不到如何应用类似的东西字符串(本例中为空格)。

我该怎么做?

【问题讨论】:

  • 就乔治·赫伯特·沃克·布什而言,你想回报什么?
  • @AlexWeitzer :好吧,没有必要将政治带入这个讨论 - 事情已经够混乱了! :)

标签: sql-server tsql substring


【解决方案1】:

您可以使用 PARSENAME. 以一种有点偷偷摸摸的方式做到这一点

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

例如,

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

【讨论】:

  • 我很感激。这简直太棒了。顺便说一句,在我的情况下,上述接受的答案不起作用。但你的回答成功了......谢谢。
  • 绝招!如果人们打算使用它,请先查看 PARSENAME 上的文档,它仅适用于 4 部分或更少的字符串。
【解决方案2】:

一种方式:

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

【讨论】:

  • 不错!工作完美。泰。
【解决方案3】:

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

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

然后输出如下:

(无列名)

搜索

【讨论】:

    猜你喜欢
    • 2020-06-25
    • 1970-01-01
    • 2012-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-16
    相关资源
    最近更新 更多