Sql server 提取变长中间字符

Sql server 提取变长中间字符,sql-server,Sql Server,我有下面的一栏,我想在第一个“:”之后和第二个“:”之前提取字符,请帮助我。为此,我正在与SQLServerExpress合作。先谢谢你 BN:wagtz2dp01:DPS BN:wagtzdp02:DPS BN:wagb2b2dp01:DPS BN:wagtzdp20:DPS BN:wagtzdp04-LOYALTY:DPS BN:wagb2b01:DPS 我想要以下输出: wagtz2dp01 wagtzdp02 wagb2b2dp01 wagtzdp20 wagtzdp04-LOYALT

我有下面的一栏,我想在第一个“:”之后和第二个“:”之前提取字符,请帮助我。为此,我正在与SQLServerExpress合作。先谢谢你

BN:wagtz2dp01:DPS
BN:wagtzdp02:DPS
BN:wagb2b2dp01:DPS
BN:wagtzdp20:DPS
BN:wagtzdp04-LOYALTY:DPS
BN:wagb2b01:DPS
我想要以下输出:

wagtz2dp01
wagtzdp02
wagb2b2dp01
wagtzdp20
wagtzdp04-LOYALTY
wagb2b01

考虑到您有一个列为[Text]的表,您可以尝试以下操作

select 
    SUBSTR([Text], CHARINDEX(':', [Text]), CHARINDEX(':', [Text],CHARINDEX(':', [Text])+1))) 
FROM table_name

使用
SUBSTRING
CHARINDEX

SELECT Substring(string, Charindex(':', string) + 1, Charindex(':', string, Charindex(':', string) + 1) - Charindex(':', string) - 1) as Middle_chars
FROM   (VALUES ('BN:wagtz2dp01:DPS' ),
               ('BN:wagtzdp02:DPS' ),
               ('BN:wagb2b2dp01:DPS' ),
               ('BN:wagtzdp20:DPS' ),
               ('BN:wagtzdp04-LOYALTY:DPS' ),
               ('BN:wagb2b01:DPS' ))tc(string) 
结果:

╔═══════════════════╗
║   Middle_chars    ║
╠═══════════════════╣
║ wagtz2dp01        ║
║ wagtzdp02         ║
║ wagb2b2dp01       ║
║ wagtzdp20         ║
║ wagtzdp04-LOYALTY ║
║ wagb2b01          ║
╚═══════════════════╝

你能告诉我们到目前为止你做了什么吗?这是一个很好的起点: