查找范围之间的IP(IPv4和IPv6)地址

时间:2019-02-19 17:49:38

标签: c# sql-server ssis ipv6 ipv4

问题:当数据以VARBINARY数据类型存储时,是否可以搜索彼此之间的值(即BETWEEN,大于和小于类型的数学运算符) ?

问题::我有一个IP地址列表(IPv4和IPv6),需要在其中确定该IP地址的地理位置,这意味着我需要在范围之间进行搜索。

通常,这可以通过将地址转换为整数然后使用BETWEEN运算符来实现。但是,随着IPv6有效地超过了所有与数字,十进制和整数相关的数据类型,截至本文发布之时,看来我需要将数据存储为VARBINARY数据类型。

我过去从未使用过这种数据类型,所以我不知道如何或者甚至不可能在值之间进行搜索。我的在线搜索未获得任何点击,因此我在这里询问。

注意:当前正在使用SQL Server 2014,但将为此项目迁移到SQL Server 2017。

1 个答案:

答案 0 :(得分:3)

您的方法是正确的。

您可以使用VARBINARY运算符进行比较。

这是MSDN论坛中的已批准答案。但是链接将来可能会断开,因此我也在下面粘贴了查询。

查询:

public class SelectProductName extends AppCompatActivity implements OnClickListener{
ArrayList<String> getString = new ArrayList<>();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_select_product_name);
    getString = getIntent().getStringArrayListExtra("stringList");

    LinearLayout ll = findViewById(R.id.layout_select_product_name);
    for (int i = 0; i < getString.size();i++){
        TextView text = new TextView(this);
        text.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT));
        text.setText(getString.get(i));
        System.out.println(getString.get(i));
        ll.addView(text);
        text.setOnClickListener(this);
    }
}
public void onClick(View view) {
    TextView tv = (TextView)view;
    Log.i("clicked", tv.getText().toString());


  }
}