选择符号和空格之间的字符串部分

时间:2015-11-08 02:16:51

标签: string select

我需要创建一个子查询(或视图)列,其中的值是从长字符串的一部分中提取的。值将如下所示:

"招聘人员:招聘人员姓名日期:......"

我需要在以下后选择招聘人员姓名:并以招聘人员姓名后面的空格结束。我知道规范化会更好,但在这种情况下我们只有查询访问权限而不是数据库设置权限。

赞赏的想法!

2 个答案:

答案 0 :(得分:1)

您可以使用正则表达式。正则表达式将允许您表示您要搜索文本 Recruiter ,后跟冒号,空格和一系列字符后跟空格,并且您希望它提取这些字符。

表达式可能看起来有点像这样(未经测试)

Recruiter: (.+) Date:

这会查找'Recruiter:',然后是一串长度为1或更大(.)的任何字符(+),将被提取(括号),后跟文字字符串'Date:'。

如何在SQL中使用它取决于您的供应商。

答案 1 :(得分:0)

我会创建一个拉出给定键值的函数。您可以使用它:

        select [dbo].[GetValue]('recruiter', 
                             'aKey: the a value Recruiter: James Bond cKey: the c value')

这将返回'James Bond'

这是功能:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
create function [dbo].[GetValue](@Key varchar(50), @Line varchar(max))
   returns varchar(max)
as
begin

declare @posStart int, @posEnd int

select @posStart=charindex(@Key, @Line)  -- the start of the key
if(@posStart = 0)
    return ''    -- key not found

set @posStart = @posStart + len(@Key) + 1  -- the start of the value
select @line = substring(@line, @posStart, 1000) -- start @Line at the value

select @posEnd=charindex(':', @line) -- find the next key
if(@posEnd > 0)
begin
    -- shorten @line to next ":"
    select @line = substring(@line, 0, @posEnd)

    -- take off everything after the value
    select @posEnd = charindex(' ', reverse(@line));
    if(@posEnd > 0)
        select @line = substring(@line, 0, len(@line) -  @posEnd + 1)

end

return rtrim(ltrim(@line))

end
go