1

物理ケーブル接続データを含む SQL Server 2008 R2 のテーブルがあります。このテーブルには、デバイスのポート番号を格納する nchar フィールド (テキスト) があります。一部のポートは「GE0」または「1/15」であるため、このフィールドを整数にすることはできません。

このテーブルからデータを取得するクエリを実行すると、ポート番号の昇順で並べ替えられます。問題は、フィールドにテキストが格納されるため、次のようにテキストを並べ替えた結果が得られることです。

1/0
1/4
10/4
10/8
11/2
12/19
2/4
3/2

代わりに、これらのポートが次のような順序で表示されるように、結果を昇順でフォーマットしたいと思います。

1/0
1/4
2/4
3/2
10/4
10/8
11/2
12/19

私の問題は、どこから始めればよいのか、まったく手がかりがないことです。このデータは、クラシック ASP (VBScript) で実行されている Web サイトを介して表示されるため、レコードセットを取得した後に再編成を行うことができます。

どうすればこれを実現できますか?

4

2 に答える 2

1

プライマリソート要件を満たすには(@EricZがキャッチしたセカンダリを見逃しました):

ORDER BY CONVERT(INT, LEFT(column_name, CHARINDEX('/', column_name)-1));

のような値で変換エラーを回避するには、次のようGE0に言う必要があります。

ORDER BY CASE WHEN column_name NOT LIKE '%[^/0-9]%' THEN
  CONVERT ... END

それらを除外する句を使用してもWHERE、変換が試行される前にフィルターが実行されるかどうかは保証できません。

もちろん、これはかなりコストのかかるソート操作になります。事前にこれら 2 つの別個の情報を分離する (たとえば、別個の列として格納する) か、計算列を追加する方がはるかに優れています。

于 2013-09-25T13:28:27.893 に答える
1

すべてのデータが同じ形式である場合、これを試してみてはどうでしょうか?

ORDER BY CAST(REPLACE(column_name,'/','.') AS NUMERIC(19,4))
于 2013-09-25T13:35:20.927 に答える