如何在SQL中提取两个特殊不同字符之间的字符串
How to extract strings between two special different characters in TSQL
我正在使用来自以下问题的代码:
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.
我想搜索 column/string 并提取从 ':'
开始到第一个 '.'
.
的字符串
我试图得到的结果是: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.
非常感谢。
这假定冒号和随后的点将始终存在。
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;
这将使用 stuff
替换包括第一个 :
在内的所有内容。然后它使用相同的结果找到第一个 .
和 substring
stuff
结果直到第一个 .
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), '')))
我正在使用来自以下问题的代码: 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.
我想搜索 column/string 并提取从 ':'
开始到第一个 '.'
.
我试图得到的结果是: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.
非常感谢。
这假定冒号和随后的点将始终存在。
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;
这将使用 stuff
替换包括第一个 :
在内的所有内容。然后它使用相同的结果找到第一个 .
和 substring
stuff
结果直到第一个 .
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), '')))