-2

我试图只提取一列的一条信息,在我的专栏中,我有以下信息

  Servers 

13.10.225 kyle:225 
13.10.225 kim:552
13.10.225 MIX:441
13.10.225 flip:235
13.10.225 hello:4568
13.10.225 tick:8231
13.10.225 back:2369

我只想提取没有 ip 、 : 和 port 的名称。

有人可以指导我正确的道路吗?

select len (substring(Servers, 1,(charindex(':', Servers+ ':') - 1 )))Name 
from List 
4

4 回答 4

1

您可以使用PATINDEXSUBSTRING

DECLARE @STR NVARCHAR(100) = '13.10.225 kyle:225'
DECLARE @NAME VARCHAR(100) = SUBSTRING(@STR, CHARINDEX(' ', @STR), patindex('%:%', @str) - CHARINDEX(' ', @STR))
DECLARE @PORT VARCHAR(100) = SUBSTRING(@STR, PATINDEX('%:%', @STR) + 1, LEN(@NAME))

SELECT @NAME + ' ' + @PORT

http://sqlfiddle.com/#!6/c59d9/1

于 2013-09-10T08:44:20.970 回答
0

我会给你一个c#的例子:

如果你有字符串str,你可以这样做:

int whiteSpaceIdx = str.IndexOf(' ');

string name = str.Substring(whiteSpaceIdx, str.IndexOf(':') - whiteSpaceIdx);

几乎相同的示例可以用 java 编写,但是您必须提供更多信息,所以我们现在将准确地说明您需要什么

于 2013-09-10T08:34:29.220 回答
0

用你的表名替换@servers

declare @servers table(name varchar(40))
insert @servers values('13.10.225 tick:8231')
insert @servers values('13.10.225 back:2369')

select left(name1, patindex('%_:%', name1)) as NewName
from @servers
cross apply (select stuff(name, 1, charindex(' ', name), '') name1) x

结果:

NewName
tick
back
于 2013-09-10T09:00:54.830 回答
0

你可以使用这个:

DECLARE @STR NVARCHAR(100) = '13.10.225 kyle:225'
DECLARE @NAME VARCHAR(100) = SUBSTRING(@str, CHARINDEX(' ',@str)+1, (CHARINDEX(':',@str)-CHARINDEX(' ',@str))-1)

SELECT @name

这应该会有所帮助。

于 2013-09-10T09:07:12.663 回答