列は文字列であり、その中のデータは
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 です。
列は文字列であり、その中のデータは
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 です。
最初にフィールドの長さで並べ替え、次にフィールド値で並べ替えることができます。このようなもの:
SELECT FIELD FROM TABLE ORDER BY LEN(FIELD), FIELD
ここで機能しました。ブレーキをかける別のテストケースがあるかどうかを確認してください。
サンプルのように、数値以外の文字列が常に 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)));
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)));