我有这样的字符串:

FOO_BAR_3423423_dsadsa.doc
BAZ_BAZzz_dsadsa.nox
_ 的数字可以不同,但​​我需要始终选择直到第二个 _ :
FOO_BAR
BAZzz_BAZ

我可以选择直到第一个 _ :
SUBSTRING ([COLUMN], 0, CHARINDEX('/', [COLUMN], 0))

但是如何将其扩展到第二个下划线?

最佳答案

您可以使用 Cross Apply,以下查询将为您提供包含数据的索引。

declare @T table
(
  Name_Level varchar(25)
)

insert into @T values
('FOO_BAR_3423423_dsadsa'),
('BAZ_BAZzz_dsadsa'),

select SUBSTRING(Name_Level,0,p2.pos) As Data,p1.Pos as firstOccurance,p2.pos As secondOccurance
from @T
  cross apply (select (charindex('_', Name_Level))) as P1(Pos)
  cross apply (select (charindex('_', Name_Level, P1.Pos+1))) as P2(Pos)

结果:
-------------------------
FOO_BAR     4   8
BAZ_BAZzz   4   10

如果您想获得下一个索引,只需再添加一个 CrossApply ,它就会为您提供 _ 的下一个索引。

关于sql - 选择子字符串直到 SQL 中的第二个下划线,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28811590/

10-16 13:13