tsql - 在 SQL 中对 IP 地址进行排序

标签 tsql sorting

我需要对我的 IP 列表进行排序。问题是我希望它们在第一部分的值之后排序,然后是第二部分,依此类推。

MYTABLE

DATA
20.1.2.1
100.1.1.1
20.1.10.1
80.8.8.8

此代码没有正确排序 IP

SELECT * FROM MYTABLE ORDER BY DATA

我希望得到这样的东西:

20.1.2.1
20.1.10.1
80.8.8.8
100.1.1.1

谁能帮帮我?

最佳答案

虽然它不是为 IP 地址设计的,但您可以使用 PARSENAME 通过在句点上拆分来将字符串分成多个部分。

我发现您的 IP 地址带有冒号而不是句点,因此您只需将所有冒号替换为句点。

因此,您可以这样做:

SELECT *
FROM MyTable
ORDER BY CAST(PARSENAME(REPLACE(Data, ':', '.'), 4) as int),
    CAST(PARSENAME(REPLACE(Data, ':', '.'), 3) as int),
    CAST(PARSENAME(REPLACE(Data, ':', '.'), 2) as int),
    CAST(PARSENAME(REPLACE(Data, ':', '.'), 1) as int)

您可以将其放入查询分析器中以确认它是否有效:

SELECT *
FROM (
    SELECT '20:1:2:1' AS Data UNION
    SELECT '100:1:1:1' UNION
    SELECT '20:1:10:1' UNION
    SELECT '80:8:8:8'
) X
ORDER BY CAST(PARSENAME(REPLACE(Data, ':', '.'), 4) as int),
    CAST(PARSENAME(REPLACE(Data, ':', '.'), 3) as int),
    CAST(PARSENAME(REPLACE(Data, ':', '.'), 2) as int),
    CAST(PARSENAME(REPLACE(Data, ':', '.'), 1) as int)

MSDN link了解更多信息。

关于tsql - 在 SQL 中对 IP 地址进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6640871/

相关文章:

sql-server - 在 SQL Server 中使用开始/结束 block 和 Go 关键字?

sql - 帮助将本周查询从 Oracle PL/SQL 转换为 SQL Server 2008

sql - 索引 View 似乎不等同于 Oracle 物化

sql - SQL Server 2008 中的逗号分割函数

MYSQL 对组中的项目进行排序,然后对组进行排序

php - 动态评分表

sql-server - SSIS 阻塞事务问题

postgresql - 在平局的情况下,对每列使用不同的标准对 postgresql 进行排序

javascript - 按字母顺序对游戏对象进行排序

wpf - 使用 WPF DataGrid 对 DataTable 进行排序?