5

SQLITE3 PDO を使用して PHP 経由で SpiceWorks データベースに接続します。デバイスのリストを IP アドレス順に表示しようとしています。これが私の現在のクエリです:

SELECT name, ip_address FROM `devices` ORDER BY ip_address

これの問題は、次のように奇妙に整理されていることです。

ここに画像の説明を入力

この問題を解決する簡単な方法はありますか?

SpiceWorks をオフにしてデータベースを編集することはできません。SQLでこれを行う方法が必要です。

4

5 に答える 5

5

INET_ATON 関数を試しましたか? これはおそらく遅い答えですが、他の人に役立つかもしれません。

SELECT name, ip_address
FROM devices
ORDER BY
INET_ATON(ip_address)
于 2016-02-24T20:04:07.770 に答える
2
ORDER BY
CAST(substr(ip_address,1,instr(ip_address,'.')) AS NUMERIC),
CAST(substr(ip_address,instr(ip_address,'.'), instr(substr(ip_address,instr(ip_address,'.')))) AS NUMERIC),

そのようなものがうまくいくはずです。意地悪だろうけど。(これは最初の 2 オクテットでソートする必要があります...)

于 2014-04-15T19:46:25.590 に答える
0

最後のオクテットだけを気にしたので、非常に単純な

SELECT name, ip_address FROM `devices`
ORDER BY CAST(substr(ip_address, 10) AS NUMERIC) DESC;

私のIPは最後のオクテットの前に9文字ありました

于 2019-07-12T19:07:03.220 に答える
-1

フィールドを VARCHAR または他の文字フィールドとして持っているため、最初の番号で並べ替えています。order by ステートメントで型を数値にキャストする必要があります。

このような:

SELECT name, ip_address
FROM devices
ORDER BY

CAST(PARSENAME([ip_address], 4) AS INT),
CAST(PARSENAME([ip_address], 3) AS INT),
CAST(PARSENAME([ip_address], 2) AS INT),
CAST(PARSENAME([ip_address], 1) AS INT)

これがSQLliteで機能するかどうかはわかりません.....

于 2014-04-15T19:40:52.043 に答える