如何在SQL Server中将IPv6地址从十进制数字字符串转换为两个bigints?

罗伯特·诺森

我有一个CSV文件,其中包含我要批量导入到sql server表中的IPv6地址。CSV文件中的地址示例可能是“ 558282959301147147248235258744685685608464”。我希望将IP地址存储到数据库中的两个bigint中,因为SQL bigint只能处理64位,而IPv6地址需要128位。我用于处理IPV4地址的导入代码是:

SET @sql = '
    INSERT INTO dbo.IPCountry
    SELECT
        REPLACE(ipFROM, ''"'', '''') AS ipFROM,
        REPLACE(ipTO, ''"'', '''') AS ipTO,
        CAST(REPLACE(countrySHORT, ''"'', '''') AS CHAR(2)) AS countrySHORT
    FROM OPENROWSET(
        BULK ''' + @Directory + 'IPCountry.csv'',
        FORMATFILE = ''' + @Directory + 'IPCountry.Xml''
    ) AS t1
';
exec sp_executesql @sql;

如何将128位IPv6值转换为两个bigint值?

大学教师

根据您的示例,它是一个38位数的数字字符串,我将其分成两半,并将每一半都转换为BIGINT组件。

这是一个演示该过程并将其逆转的示例:

-- Prepare test variables
DECLARE @Source AS NVARCHAR(38)
DECLARE @ipFROMa AS BIGINT
DECLARE @ipFROMb AS BIGINT
DECLARE @Destination AS NVARCHAR(38)

SET @Source = '55828295930114724823525874468560830464'

-- Split Source into TWO strings and then each into a BIGINT
SET @ipFROMa = (SELECT CAST(SUBSTRING(@Source,1,19) AS BIGINT))
SET @ipFROMb = (SELECT CAST(SUBSTRING(@Source,20,19) AS BIGINT))

-- Test returning BIGINTs into one IPv6 string
SET @Destination = (SELECT 
                        CAST( 
                            CAST(@ipFROMa AS NVARCHAR(19)) +
                            CAST(@ipFROMb AS NVARCHAR(19))
                             AS nvarchar(38)))

-- Display the values for verification
SELECT @Source, @ipFROMa, @ipFROMb, @Destination

结果:

55828295930114724823525874468560830464 5582829593011472482 3525874468560830464 55828295930114724823525874468560830464

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在德语语言环境中将字符串转换为Python十进制(用逗号代替点)

如何将IPV6地址转换为IPV4地址?

如何防止JSONObject来自json.jar将十进制数字字符串转换为double

如何在Java中将字符串中的大十进制数转换为十六进制?

如何在C / C ++中减去两个IPv6地址(128位数字)?

如何在SQL中将nvarchar转换为十进制

如何在SQL Server中将AVG()函数转换为十进制

如何在动作脚本3中将指数数字转换为十进制数字?

如何在SQL Server中将空字符串('')插入十进制或数字?

如何在Spark Scala中将org.apache.spark.sql.ColumnName转换为字符串,十进制类型?

如何将IPv6地址转换为二进制字符串?

如何在PHP中将指数数字(SimpleXML对象字符串)转换为十进制

如何从字符串中的多个数字中提取一个十进制数字

如何在熊猫中将所有IP地址列表转换为十进制数字

如何在PowerShell中将字符串转换为十进制?

如何将ASCII字符串转换为十进制数字?

如何在PHP中将最后两个数字转换为十进制(整数浮点数)?

如何将二进制IPv6地址转换为十六进制

如何在Java中将带有十进制(a.bc)的字符串转换为int(abc)

如何转换两个8位十进制数字以形成字母或字母数字代码

如何手动将IPv4地址转换为IPv6地址?

如何在XSLT 2.0中将字符串转换为十进制以保留最后两个小数位

如何在Java中将字符串转换为十进制

如何将数字的最后两个零转换为十进制数字

如何使用AFNetworking将ipv4地址转换为ipv6?

如何在SQL Server中将列转换为十进制类型?

如何将十六进制的 ipv6 字符串以 : 分隔为 PostgreSQL 中的十进制

如何在 c# Windows 窗体中将带有十进制的 TextBox 字符串转换为十进制。

如何在 C++ 中将十六进制转换为十进制字符串?