2016-04-03 7 views
0

私はIPaddressという名前の列を含むテーブルFTを持っています。列のデータは、すべて「100.45.4.7」という形式のIPアドレスです。 100.45.x.xから100.150.x.xまでのすべてのIPアドレスを選択できるかどうかは不思議です。 (私は最後の2つのノードについて気にしない)。私はエラーなしで実行されているこの次のコードを持っていますが、私はそれが正しいかどうかわかりません。Sql LIKE数値の範囲

  select * from FT where IPaddress like "100.[45-150]%" 

thx!

+0

[mysqlデータベースに格納したIPアドレス](http://stackoverflow.com/questions/ 6427786/ip-address-in-mysql-database) – lad2025

答えて

4

文字列としてIPアドレスを格納しないでください。それらを整数として格納します。

MySQL関数INET_ATON()を使用してIPアドレス文字列を数値に変換し、INET_NTOA()を使用して変換します。この変換が実行されると、IPに対応する番号は順次になりますので、クエリにはIPaddress BETWEEN INET_ATON('100.45.0.0') AND INET_ATON('100.150.255.255')のような条件を使用できます。

(あなたのプログラミング言語にも同様の機能を有していてもよく、例えば、PHPはip2long()long2ip()を持っているのと同じ原理が働きます。)

+0

複数回upvoteできますか? :P – xQbert

+0

thx !!私はINTとしてIPアドレスを格納していました。その後、保存されたデータは "100.45.7.8"ではなく "1215"になりました。これをもう一度確認してもらえますか?ありがとう! –

+0

@ duskwuff実際にはすべてのデータが1215として保存され、4ノードの元の形式ではありません(例: "100.45.7.8") –

1

Duskwuffは非常に良い答え、私が使用することをお勧めしたい1を与えました私の上に

しかし、あなたは、現在の構造を維持することを強制している場合、あなたはこのようなあなたのクエリの作業を行うことができます。

select * from FT where SUBSTRING_INDEX(IPaddress , '.', 1) = 100 AND SUBSTRING_INDEX(SUBSTRING_INDEX(IPaddress , '.', 2),'.',-1) BETWEEN 45 AND 150 
+0

thx!私は、PythonでSQL文を使用していた、それはsubstring_indexのためのそのような機能のように、任意のチャンスuはなぜ知っている?ありがとう!!!!!! –

+0

あなたのバージョンのmysqlがないためです。 5.1以上をお試しください。 –