[英]Pick the 3rd and 4th octet in an IP and assign it a hostname
在MS Access中,我试图按IP的第3个和第4个八位位组对IP进行排序,然后在它们各自的列中将它们分类为[IpAddress]和[HostName]。 第三个八位位组将链接到服务器机架。 例如1,22或121,第4个八位位组将链接到其在机架中的位置。 例如s1,s22或s121。 因此,将从列表和查询中对IP进行排序,以根据IP构建HostName。 我如何/应该去做这个。 我对MS访问不是很有经验。 我尝试使用iif语句,但是无法获得所需的结果。 我希望HostName遵循以下命名法:121s1。 感谢您的所有帮助。
SELECT IIf(query1.Ipaddress Like '*.*.3.#', "1003s'#'", 22) AS HostName
FROM Query1;
这是我要使用的行。 但是,它只会产生带有引号1003a'#'的输出。 如果我周围没有“”,它将在查询表达式IIf(query1.Ipaddress like' 。. 3。#',1003a'#',22)中返回“语法错误(缺少运算符)。带有引号确切的说是引号(1003a'#')。22只是一个占位符,因此我可以在访问中回复一个答案。也许这将对我所要求的有所帮助。
正如@WEI_DBA在对该问题的评论中所建议的那样,请考虑更改IP地址的存储方式。 代替单个字符串
IpAddress
----------
10.0.121.1
10.0.12.34
您可以将它们存储为四个单独的整数
IpOctet1 IpOctet2 IpOctet3 IpOctet4
-------- -------- -------- --------
10 0 121 1
10 0 12 34
然后,您可以简单地将HostName导出为
IpOctet3 & "s" & IpOctet4
如果您希望将旧的表示形式用于显示目的,则可以使用
IpOctet1 & "." & IpOctet2 & "." & IpOctet3 & "." & IpOctet4
将4个新的Integer
列添加到表中后,可以使用VBA代码填充它们,如下所示:
Option Compare Database
Option Explicit
Sub SplitIpAddresses()
Dim cdb As DAO.Database
Set cdb = CurrentDb
Dim rst As DAO.Recordset
Set rst = cdb.OpenRecordset("SELECT * FROM Table1 WHERE IpAddress IS NOT NULL", dbOpenDynaset)
Do While Not rst.EOF
Dim octets As Variant
octets = Split(rst!IpAddress, ".")
rst.Edit
rst!IpOctet1 = octets(0)
rst!IpOctet2 = octets(1)
rst!IpOctet3 = octets(2)
rst!IpOctet4 = octets(3)
rst.Update
rst.MoveNext
Loop
rst.Close
End Sub
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.