子串函数和charindex

时间:2013-09-10 08:28:21

标签: sql sql-server tsql

我正在尝试仅提取一篇关于列的信息,在我的专栏中我有以下信息

  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,:和端口的名称。

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

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

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

我将在c#中给你一个例子:

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

int whiteSpaceIdx = str.IndexOf(' ');

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

几乎相同的例子可以用java编写,但你必须提供更多的信息,所以我们现在正是你需要的

答案 2 :(得分:0)

将@servers替换为您的tablename

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

答案 3 :(得分: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

这应该有所帮助。