当您混合使用数字和字符串时,如何使用订单执行select语句?

时间:2012-09-24 19:45:44

标签: sql ms-access asp-classic vbscript jet

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;数据源)

3 个答案:

答案 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)));