我有一个数据库,其中列“BIRTH_DATE”中有日期(例如2015-06-26)。我使用DataTables来为用户显示信息。我想要进行数字范围搜索。但是当我使用DataTables插件ColumnFilter并尝试使用number-range类型过滤器时,它不起作用。
只要我在from或to字段中输入任何值,它就告诉我没有结果。但是,如果在同一列中有一个日期写成20150626的行,则会显示筛选器。因此,我理解问题在于我的数字中间的符号“-”。如何使筛选器忽略“-”符号?
数字范围过滤器代码:
只要我在from或to字段中输入任何值,它就告诉我没有结果。但是,如果在同一列中有一个日期写成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();
});
}
编辑:2015-06-29
或许有人可以帮我制作这个过滤器,忽略输入格式只运行简单的操作,例如:
Select * from table where BIRTH_DATE between '2010' and '2011-12'
在SQL中,这样的查询是可以正常工作的。
BIRTH_DATE
列是varchar
类型。我无法更改它,因为我每天都会收到大量的新数据,并且我接收到的数据中BIRTH_DATE
列是varchar
类型。如果我更改它,那么每当我想上传新数据时,都必须这样做。 - hockeyman