Column是一个字符串,其中的数据可以是
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数据库的ASP / VBScript(Provider = Microsoft.Jet.OLEDB.4.0;数据源)
答案 0 :(得分: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)));
答案 1 :(得分:1)
您可以尝试先按字段的长度排序,然后按字段值排序。像这样:
SELECT FIELD FROM TABLE ORDER BY LEN(FIELD), FIELD
它在这里工作,看看是否还有另一个测试案例可以制动它。
答案 2 :(得分:1)
如果非数字字符串始终以样本中的单个字母开头,则可以对三个列表达式进行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)));