2017-01-27 1 views
1

In meiner Datenbanktabelle durchführt habe ich eine Spalte, in Datum als Zeichenfolge gespeichert wird. Das Format ist der 29. Januar 2017. Jetzt möchte ich alle Zeilendaten dieser Tabelle abrufen, wobei das aktuelle Datum größer ist als das gespeicherte Datum. Ich sollte zuerst diese Spalte dateString in tatsächliches NSDate umwandeln und dann einen Vergleich mit dem aktuellen Datum machen, wodurch alle Zeilendaten abgerufen werden. Aber ich weiß nicht, wie ich die Abfrage schreiben soll. Jede Hilfe würde sehr geschätzt werden. Ich benutze sqlite.Schreiben sqlilte Abfrage für ersten datestring bisher Umwandlung und eine Übereinstimmung mit dem aktuellen Datum

+0

müssen Sie stringDate in NSDate konvertieren, nachdem Sie Daten von sqlite abgerufen haben? – Ronak

+1

besseres Speicherdatum als DateTime-Format, und Sie können direkt – larva

+0

vergleichen Was ist der Punkt der Konvertierung, nachdem Daten abgerufen wurden. Zuerst muss ich die Daten abgleichen und dann nur die Daten abrufen, die dem oben genannten Kriterium entsprechen. – mars

Antwort

-1

Sie haben unter Umwandlung von Datumsformatierer durchzuführen und als retrive Ihre Daten mit query:

//First You have to formate your date in your string date formate. 
NSDateFormatter *dateformatter = [[NSDateFormatter alloc] init]; 
[dateformatter setDateFormat:@"YYYY-MM-DD HH:MM:SS.SSS"]; 
NSString *currentDate=[dateformatter stringFromDate:[NSDate date]]; 

//Your Query 
NSString *fetchQuery = [NSString stringWithFormat:@"SELECT * FROM TableName WHERE date < '%@'",currentDate]; 

Edit:

Schauen Sie sich das Bildschirmfoto:

enter image description here

-Link:https://www.sqlite.org/datatype3.html#datetime

Wenn Sie Zeichenfolge Datum Vergleich wollen, müssen Sie Datum ameisen SQLite, das und als SQLite< &> Funktion arbeitet mit dieser Abfrage folgen.

Also tun Sie einfach eine Sache, wo Sie Daten formatieren Format Datum ändern und Daten in DB einfügen und als alles funktioniert wie erwartet.

Hoffe, das wird Ihnen helfen, richtige Daten zu erhalten.

+0

Dies liefert falsche Einträge wie '14. Januar 2016', '23. Januar 2017' ...... etc. wenn nach '27. Dezember 2017' gesucht. Kann sein, weil String hier verglichen wird, anstatt tatsächliche Daten. – mars

+0

Sie können Daten nicht als Zeichenfolgen in diesem Format vergleichen. Der Name des Monats wird alphabetisch verglichen. Und es geht nicht um verschiedene Sprachen. – rmaddy

+0

Bitte überprüfen Sie meine aktualisierte Antwort – CodeChanger

0

Die beste Möglichkeit ist das Speichern von Datumsstrings in SQlite-Zeit String-Format ex YYYY-MM-DD So können Sie datetime direkt vergleichen.

Hier SQLite-Abfrage in Ihrem Fall ist (ich habe Test in Terminal)

create table TestData (rowID integer, date_string varchar(10)); 
insert into TestData values(0, 'Jan 27, 2017'); 
insert into TestData values(1, 'Jan 28, 2017'); 
insert into TestData values(2, 'Feb 10, 2017'); 
insert into TestData values(3, 'Feb 12, 2017'); 
insert into TestData values(4, 'Feb 13, 2017'); 
insert into TestData values(5, 'Aug 20, 2016'); 
insert into TestData values(6, 'Aug 21, 2017'); 
insert into TestData values(7, 'Aug 22, 2017'); 

, wenn ich alle Abfrage

select * from TestData; 
0|Jan 27, 2017 
1|Jan 28, 2017 
2|Feb 10, 2017 
3|Feb 12, 2017 
4|Feb 13, 2017 
5|Aug 20, 2017 
6|Aug 21, 2017 
7|Aug 22, 2017 

Und hier ist wählen Sie brauchen, wenn ich alle Reihe mit date >= '20170210'

erhalten
select rowID,replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(date_string, 'Jan', '01'), 'Feb', '02'), 'Mar', '03'), 'Apr', '04'), 'May', '05'), 'Jun', '06'), 'Jul', '07'), 'Aug', '08'), 'Sep', '09'), 'Oct', '10'), 'Nov', '11'), 'Dec', '12') as date_time_string 
from TestData 
where substr(date_time_string, 8)||substr(date_time_string, 1, 2)||substr(date_time_string, 4, 3) >= '20170210'; 

2|02 10, 2017 
3|02 12, 2017 
4|02 13, 2017 
6|08 21, 2017 
7|08 22, 2017 

Es scheint schlecht zu sein, hoffe das hilft Ihnen.

Verwandte Themen