Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用sql语句拆分字符串(ip地址)_Sql_Sql Server 2008_Tsql - Fatal编程技术网

使用sql语句拆分字符串(ip地址)

使用sql语句拆分字符串(ip地址),sql,sql-server-2008,tsql,Sql,Sql Server 2008,Tsql,我需要在sql中拆分ip地址 我已经做了很多发现,但找不到任何内置的方法来完成这项任务 我怎样才能完成这项任务 我正在使用sql server您可以按如下方式使用PARSENAME函数: with address as( select '192.168.1.1' as IpAddress Union select '192.168.1.2' as IpAddress Union select '192.168.1.3' as IpAddress ) SELECT PARSENAME(IpAddr

我需要在sql中拆分ip地址

我已经做了很多发现,但找不到任何内置的方法来完成这项任务

我怎样才能完成这项任务


我正在使用sql server

您可以按如下方式使用PARSENAME函数:

with address as(
select '192.168.1.1' as IpAddress
Union
select '192.168.1.2' as IpAddress
Union
select '192.168.1.3' as IpAddress
)
SELECT PARSENAME(IpAddress,4) as first, 
   PARSENAME(IpAddress,3) as second,
   PARSENAME(IpAddress,2) as third,
   PARSENAME(IpAddress,1) as fourth,
FROM address

PARSENAME函数返回对象名称的指定部分。

我发现将IPV4地址从“点字符串”表示法转换为(大)整数非常有用,这样就可以存储、比较。(请注意,以下函数不执行输入验证。)

转换回填充有零的虚线字符串(以便alpha排序能够正常工作):


如何分割?您尝试了什么?IP地址的格式是什么(4或6)?您希望以什么格式存储它?看看那些为你提供完成任务所需工具的方法和步骤。一个好的问题包括示例和尝试。你的意思是将4个部分以“.”分隔作为子字符串吗??分享一些你正在寻找的例子。对不起,它不需要。我抄错了。我会更新的。非常感谢。
create function [dbo].[IntegerIPV4Address]( @IPV4Address VarChar(16) )
  returns BigInt
  with SchemaBinding -- Deterministic function.
  begin
  -- NB: ParseName   is non-deterministic.
  declare @Dot1 as Int = CharIndex( '.', @IPV4Address );
  declare @Dot2 as Int = CharIndex( '.', @IPV4Address, @Dot1 + 1 );
  declare @Dot3 as Int = CharIndex( '.', @IPV4Address, @Dot2 + 1 );
  return Cast( Substring( @IPV4Address, 0, @Dot1 ) as BigInt ) * 0x1000000 +
    Cast( Substring( @IPV4Address, @Dot1 + 1, @Dot2 - @Dot1 - 1 ) as BigInt ) * 0x10000 +  
    Cast( Substring( @IPV4Address, @Dot2 + 1, @Dot3 - @Dot2 - 1 ) as BigInt ) * 0x100 +
    Cast( Substring( @IPV4Address, @Dot3 + 1, Len( @IPV4Address ) * 1 ) as BigInt );
  end
create function [dbo].[NormalizedIPV4Address]( @IntegerIPV4Address as BigInt )
  returns VarChar(16)
  with SchemaBinding -- Deterministic function.
  begin
  declare @BinaryAddress as VarBinary(4) = Cast( @IntegerIPV4Address as VarBinary(4) );
  return Right( '00' + Cast( Cast( Substring( @BinaryAddress, 1, 1 ) as Int ) as VarChar(3) ), 3 ) +
    '.' + Right( '00' + Cast( Cast( Substring( @BinaryAddress, 2, 1 ) as Int ) as VarChar(3) ), 3 ) +
    '.' + Right( '00' + Cast( Cast( Substring( @BinaryAddress, 3, 1 ) as Int ) as VarChar(3) ), 3 ) +
    '.' + Right( '00' + Cast( Cast( Substring( @BinaryAddress, 4, 1 ) as Int ) as VarChar(3) ), 3 )
  end