1

列は文字列であり、その中のデータは

10
2
3
3.1
3.2
a10
a11
1
a12.2
a12.3

結果を次のように戻したい:

1
2
3
3.1
3.2
10
a10
a11
a12.2
a12.3

これは、MSACCESS Web データベース (Provider=Microsoft.Jet.OLEDB.4.0;Data Source) を使用する ASP/VBScript です。

4

3 に答える 3

1

最初にフィールドの長さで並べ替え、次にフィールド値で並べ替えることができます。このようなもの:

SELECT FIELD FROM TABLE ORDER BY LEN(FIELD), FIELD

ここで機能しました。ブレーキをかける別のテストケースがあるかどうかを確認してください。

于 2012-09-24T20:14:03.370 に答える
1

サンプルのように、数値以外の文字列が常に 1 文字で始まる場合は、3 つの列式を ORDER BY できます。

SELECT DISTINCT
    IIf(IsNumeric(the_column) = True, 0, 1) AS order_by1,
    IIf(IsNumeric(the_column) = True, '', Left(the_column,1)) AS order_by2,
    IIf(IsNumeric(the_column) = True,
        Val(the_column), Val(Mid(the_column,2))) AS order_by3,
    the_column
FROM YourTable
ORDER BY 1, 2, 3;

これらの order_byX フィールドを結果セットに含めたくない場合は、代わりに ORDER BY 句に移動してください。

SELECT DISTINCT
    the_column
FROM YourTable
ORDER BY
    IIf(IsNumeric(the_column) = True, 0, 1),
    IIf(IsNumeric(the_column) = True, '', Left(the_column,1)),
    IIf(IsNumeric(the_column) = True,
        Val(the_column), Val(Mid(the_column,2)));
于 2012-09-24T21:04:56.520 に答える
1

MS Access はどうですか:

SELECT IIf(IsNumeric(Left([fld],1)),0,Left([fld],1)) AS Expr1, 
  Val(IIf(IsNumeric(Left([fld],1)),[fld],Mid([fld],2))) AS Expr2, Fld
FROM Table
ORDER BY IIf(IsNumeric(Left([fld],1)),0,Left([fld],1)), 
  Val(IIf(IsNumeric(Left([fld],1)),[fld],Mid([fld],2)));
于 2012-09-24T20:05:44.703 に答える