1

我正在使用以下问题的代码: How to extract strings between two special characters in TSQL

DECLARE @c varchar(100)
SET     @c = 'Microsoft.SystemCenter.UserActionManager:ServerName_1.domain.net;ServerName_2.domain.net' 

SELECT SUBSTRING(@c, CHARINDEX(':', @c) + 1, LEN(@c) - CHARINDEX('.', @c) - CHARINDEX(':', @c))

当前结果:

ServerName_1.domain.net;ServerName_2.

我想搜索一个列/字符串并提取从':'第一个开始到第一个的字符串'.'

我试图得到的结果是:ServerName_1

需要注意的是,服务器名称的长度会有所不同。


此外,当我尝试运行以下查询时:

SELECT 
SUBSTRING(Column_Name, CHARINDEX(':', Column_Name) + 1, LEN(Column_Name) - CHARINDEX(':', Column_Name) - CHARINDEX(':', Column_Name))
FROM [dbo].[ServerNameTable] 

我收到以下错误:

Msg 537, Level 16, State 3, Line 1
Invalid length parameter passed to the LEFT or SUBSTRING function.

提前谢谢了。

SQL小提琴

4

2 回答 2

4

这将替换所有内容,包括第一次:使用stuff. 然后它使用相同的结果来查找第一个结果.substringstuff一个结果.

DECLARE @c varchar(100)
SET     @c = 'Microsoft.SystemCenter.UserActionManager:ServerName_1.domain.net;ServerName_2.domain.net'

SELECT SUBSTRING(STUFF(@c, 1, CHARINDEX(':',@c), ''), 0, CHARINDEX('.', STUFF(@c, 1, CHARINDEX(':',@c), '')))
于 2015-08-07T19:48:17.503 回答
0

这假定冒号和后续的点将始终存在。

declare @Sample as VarChar(100) =
  'Microsoft.SystemCenter.UserActionManager:ServerName_1.domain.net;ServerName_2.domain.net';

with FiendishThingy as (
  select Substring( @Sample, CharIndex( ':', @Sample ) + 1, Len( @Sample ) - CharIndex( ':', @Sample ) ) as AfterColon )
  select Substring( AfterColon, 1, CharIndex( '.', AfterColon ) - 1 ) as ServerName
    from FiendishThingy;
于 2015-08-07T19:42:35.217 回答