SQL Server:如何在查询中使用子字符串?
我有这样的争吵: 我该怎么做 如何在“选择”操作中使用此选项 更新: 我想找到第一个和最后一个“[”””,只捕捉里面的东西 例如: 声音:英文版[钴爪] 返回 钴爪 致以最良好的祝愿,SQL Server:如何在查询中使用子字符串?,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我有这样的争吵: 我该怎么做 如何在“选择”操作中使用此选项 更新: 我想找到第一个和最后一个“[”””,只捕捉里面的东西 例如: 声音:英文版[钴爪] 返回 钴爪 致以最良好的祝愿, Valter Henrique。听起来您需要一个正则表达式,以便从源字符串中获取所需的数据 select substring(field, charindex('[', field) + 1, charindex(']', field) - charindex('[', field) - 1) 获取第一个[和
Valter Henrique。听起来您需要一个正则表达式,以便从源字符串中获取所需的数据
select substring(field, charindex('[', field) + 1, charindex(']', field) - charindex('[', field) - 1)
获取第一个
[
和下一个]
之间的文本
-- 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)
获取第一个
[
和最后一个]
之间的文本
-- 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)
@squawknull这是与行一起出现的,数据库不是我的。我明白了。所以它是字符串的一部分。我将修改我的查询。我尝试您推荐的方法,但现在我的情况是:选择前(50)个子字符串(character,charrendex('[',character)+1,charrendex(']',character)-charrendex('[',character)-1)FROM actor_characterreturns:传递给LEFT或SUBSTRING函数的长度参数无效。严重性16状态2是否每一行都有“[”和“]”字符?很好:如何更新此参数以找到最后的“]”(请参阅问题中的更新)?@Jon–添加了使用last
]
的版本。我是否能够在查询中获取一列,并在同一select语句中获取该列的子字符串?