DataTables columnFilter数字范围过滤

hoc*_*man 5 php sql filter datatables datatables-1.10

我有数据库,其中列中"BIRTH_DATE"有日期(例如2015-06-26).我DataTables用来显示用户的信息.我想进行数字范围搜索.但是当我使用DataTables插件ColumnFilter并尝试使用number-range类型过滤器时,它不起作用.

只要我输入任何值fromto字段,它就会告诉我没有结果.但是如果在同一列中有一行写日期就像20150626过滤器显示它一样.所以据我所知,问题在于-我的数字中间的符号.我怎么能过滤掉忽略-标志?

数字范围过滤器代码:

function fnCreateCharRangeInput() {

        th.html(_fnRangeLabelPart(0));
        var sFromId = sTableId + 'range_from_' + i;
        var from = $('<input type="text" class="number_range_filter" id="' + sFromId + '" rel="' + i + '"/>');
        th.append(from);
        th.append(_fnRangeLabelPart(1));
        var sToId = sTableId + 'range_to_' + i;
        var to = $('<input type="text" class="number_range_filter" id="' + sToId + '" rel="' + i + '"/>');
        th.append(to);
        th.append(_fnRangeLabelPart(2));
        th.wrapInner('<span class="filterColumn filter_number_range" />');
        var index = i;
        aiCustomSearch_Indexes.push(i);



        //------------start range filtering function


        /*  Custom filtering function which will filter data in column four between two values
        *   Author:     Allan Jardine, Modified by Jovan Popovic
        */
        $.fn.dataTableExt.afnFiltering.push(
            function (oSettings, aData, iDataIndex) {
                var iMin = document.getElementById(sFromId).value * 1;
                var iMax = document.getElementById(sToId).value * 1;
                var iValue = aData[index] == "-" ? 0 : aData[index] * 1;
                if (iMin == "" && iMax == "") {
                    return true;
                }
                else if (iMin == "" && iValue < iMax) {
                    return true;
                }
                else if (iMin < iValue && "" == iMax) {
                    return true;
                }
                else if (iMin < iValue && iValue < iMax) {
                    return true;
                }
                return false;
            }
        );
        //------------end range filtering function



        $('#' + sFromId + ',#' + sToId, th).keyup(function () {

            var iMin = document.getElementById(sFromId).value * 1;
            var iMax = document.getElementById(sToId).value * 1;
            if (iMin != 0 && iMax != 0 && iMin > iMax)
                return;

            oTable.fnDraw();

        });


    }
Run Code Online (Sandbox Code Playgroud)

编辑:2015-07-02

或者也许有人可以帮助我使这个过滤器忽略输入格式只是运行简单的动作,例如:

Select * from table where BIRTH_DATE between '2010' and '2011-12'
Run Code Online (Sandbox Code Playgroud)

因为这样的查询在sql中工作正常.

小智 1

您的色谱柱是什么类型BIRTH_DATE

我的建议是将其设为datetime(看起来像 的东西2015-06-26 16:10:18.820,尽管它也可以没有精确的时间)。如果将列类型设置为 ,
数据表可以排序。datatimedate

有关 DataTables 中的 column.type 的更详细描述,请参阅此处https://datatables.net/reference/option/columns.type