我正在尝试仅提取一篇关于列的信息,在我的专栏中我有以下信息
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
答案 0 :(得分:1)
您可以使用PATINDEX
和SUBSTRING
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
答案 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
这应该有所帮助。