0

当我在 MSSQL Studio 中尝试查询时,我有一个 SQL 查询正在拉回正确排序的结果。

我正在使用来自 Datatables.net 的数据表,除了排序问题之外,一切都很好。我在第一列中有一些属性,我想像这样订购这些:

1
1a
1b
2
3
4a
5
etc

然而回来的是这样的:

1
10
100
11
11a

我看过各种帖子,但似乎没有任何效果,我相信这一定是我应该从数据表插件触发但找不到任何东西。

有人可以建议吗?

4

1 回答 1

0

您的数据包含数字和字符,因此默认情况下它们将被排序为字符串。您应该编写自己的插件来对数据类型进行排序。查看此处此处 ,了解如何编写插件以及如何将其与您的表一起使用。

编辑:今天有时间处理数据表的东西。如果您仍然需要解决方案,请执行以下操作:

//Sorting plug-in
jQuery.extend( jQuery.fn.dataTableExt.oSort, {
    //pre-processing
    "numchar-pre": function(str){
        var patt = /^([0-9]+)([a-zA-Z]+)$/;    //match data like 1a, 2b, 1ab, 100k etc.
        var matches = patt.exec($.trim(str));
        var number = parseInt(matches[1]);     //extract the number part
        var str = matches[2].toLowerCase();    //extract the "character" part and make it case-insensitive
        var dec = 0;
        for (i=0; i<str.length; i++)
        {
         dec += (str.charCodeAt(i)-96)*Math.pow(26, -(i+1));  //deal with the character as a base-26 number
        }
        return number + dec;       //combine the two parts
    },

    //sort ascending
    "numchar-asc": function(a, b){
        return a-b;
    },

    //sort descending
    "numchar-desc": function(a, b){
        return b-a;
    }
});

//Automatic type detection plug-in  
jQuery.fn.dataTableExt.aTypes.unshift(
   function(sData)
   {
        var patt = /^([0-9]+)([a-zA-Z]+)$/;
        var trimmed = $.trim(sData);
        if (patt.test(trimmed))
        {
            return 'numchar';
        }
        return null;
    }
 );

可以使用自动类型检测功能让自动检测数据类型也可以设置列的数据类型

"aoColumns": [{"sType": "numchar"}]

于 2013-03-24T00:13:13.793 回答