2011-04-17 36 views
1

我有这样一行:SQL Server:如何在查询中使用子字符串?

[Arturo Ochando] <20> 

但我只想:

Arturo Ochando 

我怎样才能做到这一点?

如何在'select'操作中使用它?

更新: 我想找到第一个和最后一个'['']',只捕捉里面的东西。

例子:

声音:英语版)[钴爪]

回报

钴爪

最好的问候, 瓦尔特·恩里克。

回答

2

获得第一[和未来]之间的文本。第一[和最后]之间

-- cte for test data 
;with actor_character(character) AS 
(
    select 'voice: English version) [Cobalt Claw]' union all 
    select 'voice: English version) [Cobalt Claw' union all 
    select 'voice: English version) Cobalt Claw]' union all 
    select 'voice: English version) ]Cobalt Claw[' union all 
    select 'voice: English version) Cobalt Claw' 
) 
select *, 
    case 
    -- Test for not valid positions 
    when Start.Pos = 1 or Stop.Pos = 0 
    then character 
    else substring(character, Start.Pos, Stop.Pos-Start.Pos) 
    end 
from actor_character 
    cross apply (select charindex('[', character)+1) as Start(Pos) 
    cross apply (select charindex(']', character, Start.Pos)) as Stop(Pos) 

获取文本。

-- cte for test data 
;with actor_character(character) AS 
(
    select 'voice: English version) [Cobalt Claw]' union all 
    select 'voice: English version) [Cobalt Claw' union all 
    select 'voice: English version) Cobalt Claw]' union all 
    select 'voice: English version) ]Cobalt Claw[' union all 
    select 'voice: English version) [Cobalt]Claw]' union all 
    select 'voice: English version) Cobalt Claw' 
) 
select *, 
    case 
    -- Test for not valid positions 
    when Start.Pos = 0 or Stop.Pos = 0 or Start.Pos > len(character)-Stop.Pos 
    then character 
    else substring(character, Start.Pos+1, len(character)-Stop.Pos-Start.Pos) 
    end 

from actor_character 
    cross apply (select charindex('[', character)) as Start(Pos) 
    cross apply (select charindex(']', reverse(character))) as Stop(Pos) 
+0

好的:你如何更新这个以找到最后的']'(见问题中的更新)? – 2011-04-18 08:18:04

+0

@Jon - 增加了一个使用最后一个']'的代码。 – 2011-04-18 08:52:54

+0

感谢兄弟,它完美的作品。 – 2011-04-18 12:45:29

0
select substring(field, charindex('[', field) + 1, charindex(']', field) - charindex('[', field) - 1) 
+0

@squawknull这个<20>走了一排,数据库不是我的。 – 2011-04-17 22:15:40

+0

我明白了。所以它是字符串的一部分。我会修改我的查询。 – squawknull 2011-04-17 22:21:58

+0

我尝试你的建议,但现在在这里工作的是我的情况: SELECT TOP(50)子字符串(字符,charindex('[',字符)+ 1,charindex(']',字符) - charindex('['字符) - 1)FROM actor_character – 2011-04-17 22:41:55

相关问题