Ich habe Datenbank wo in Spalte "BIRTH_DATE"
gibt es Datum (zum Beispiel 2015-06-26
). Ich verwende DataTables
, um Informationen für Benutzer anzuzeigen. Ich möchte die Nummernbereichssuche durchführen. Aber wenn ich DataTables
Plugin ColumnFilter
verwende und versuche, number-range
Typ Filter zu verwenden, funktioniert es nicht.DataTables columnFilter Anzahl-Bereich Filterung
Sobald ich einen Wert zu from
oder to
Feld eingeben, sagt mir, dass es keine Ergebnisse gibt. Aber wenn in derselben Spalte eine Zeile steht, in die das Datum geschrieben wird, zeigt 20150626
den Filter an. So, wie ich verstehe, ist das Problem in Symbol -
in der Mitte meiner Nummer. Wie kann ich Filter -
ignorieren lassen?
Anzahl Range Filtercode:
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();
});
}
EDIT: 2015-06-29
Oder vielleicht könnte jemand mir helfen, diese Filter zu machen Eingabeformat einfach ignorieren einfache Aktion wie zum Beispiel laufen:
Select * from table where BIRTH_DATE between '2010' and '2011-12'
Da Abfrage wie das funktioniert gut in SQL.
Meine Spalte 'BIRTH_DATE' ist' varchar' Typ. Und ich kann es nicht ändern, weil ich jeden Tag große Mengen neuer Daten erhalte und in den Daten, die ich in der Spalte "BIRTH_DATE" erhalte, steht 'varchar'. Wenn ich es ändere, muss ich es jedes Mal tun, wenn ich neue Daten hochladen möchte. – hockeyman
Datumsspalten akzeptieren String-Daten in der Einfügung, so dass es egal ist, dass das, was Sie erhalten, als varchar aufgelistet ist, geben Sie einfach das ein und MySQL fügt es in eine DATE-Spalte ein. https://dev.mysql.com/doc/refman/5.1/en/datetime.html –
Und hören Sie nicht auf jemanden, der Ihnen sagt, Daten in etwas außer DATE oder DATETIME Spalten zu speichern, sobald Sie das tun können Sie verwende die eingebauten Datumsfunktionen nicht und erhalte Probleme wie diese. Datatabellen ist es auch egal, wie die Daten in einer Datenbank gespeichert werden, es sind alle Strings in HTML. Es ist nur wichtig, dass das Format korrekt ist, damit der Datumsbereichsfilter funktioniert. –