提取不同长度的中间字符

时间:2017-01-13 23:06:26

标签: sql-server

我有以下专栏,我希望在第一个':'之后和第二个':'之前提取字符,请帮助我。我正在使用SQL Server Express。提前谢谢你。

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

2 个答案:

答案 0 :(得分:0)

考虑到你有一个包含[[Text]列的表格,你可以试试。

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

答案 1 :(得分:0)

使用SUBSTRINGCHARINDEX

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          ║
╚═══════════════════╝