# Datum vergleichen, SQL-Abfrage



## Holloway (18. Feb 2010)

Hallo,

folgendes Problem:
eine Datenbank mit einer Tabelle in der Einträge mit Datums angaben gemacht werden.
Das datum wird in einer spalte vom Typ "date" geschrieben. Inhalt "2010-02-17"
jetzt möchte ich über eine methode einen Monat auswählen, und dann sagen
"zeige mir alle einträge die im Monat "2" gemacht wurden.
ich hab da echt keine Idee ! einen String zerlegen ist einfach, aber wie geht das
beim Datum Objekt ??
Danke !


----------



## ImmNek (18. Feb 2010)

Also ich bin jetzt nicht sicher, ob ich das richtig verstehe. Du hast die Daten als ein String mit dem Format Jahr-Monat-Tag vorliegen? Wenn das so ist, so würde eine Klasse schreiben, welche etwa so aussehen könnte:

```
public class Datum {
	private int year, month, day;
	
	public Datum(String datum) {
		String strYear, strMonth, strDay;
		
		// 1. Den Datum-String in die drei Substrings Jahr, Monat und Tag spliten
		
		// 2. Die Substrings mit der Methode Integer.parseInt(String str) in Zahlen umwandeln
		year = Integer.parseInt(strYear);
		month = Integer.parseInt(strMonth);
		day = Integer.parseInt(strDay); 
	}
	
	public int getYear() {
		return year;
	}
	
	public int getMonth() {
		return month;
	}
	
	public int getDay() {
		return day;
	}

    public String toString() {
		return "" + year + "-" + month + "-" + day;
	}
}
```

Noch ein Beispiel für die Verwendung der Klasse:

```
ArrayList<Datum> datumListe = new ArrayList<Datum>();

// hinzüfügen von beliebigen vielen Datum
datumListe.add(new Datum("2010-01-03"));
// .....

// alle Daten aus ausgeben des Monats Februar
for (int i = 0; i < datumList.size(); i++) {
	if (datumList.get(i).getMonth() == 2) {
		System.out.println(datumList.get(i).toString());
	}
}
```


----------



## Gast2 (18. Feb 2010)

Schau dir mal die Klassen Calendar und Date an... 

```
Date date = null;
		 Calendar calendar = Calendar.getInstance();
		 calendar.setTime(date);
		 calendar.get(Calendar.MONTH);
```


----------



## Chriss_07 (19. Aug 2010)

Und wenn ich die Abfrage über ein SQL String realisieren will? 
Ich bekomme den MOnat und das Jahr aus einer ComboBox, kann man das Datum auch dann in sql zusammensetzten und als Abfrage starten?
Bedingungen wie im ersten Post, also nur die Datensätze des Monates abfragen, beschränkt auf das entsprechende JAhr. Das Datum ist so  aufgebaut: 2010-08-19
Geht das?


----------



## carolin (19. Aug 2010)

Chriss_07 hat gesagt.:


> Und wenn ich die Abfrage über ein SQL String realisieren will?
> Ich bekomme den MOnat und das Jahr aus einer ComboBox, kann man das Datum auch dann in sql zusammensetzten und als Abfrage starten?



Ja, du kannst die Werte aus deiner ComboBox holen und dann in der entsprechenden Form zusammensetzen. Ich habe mit JDBC gearbeitet und die Anfrage wird als String gesendet, den du mit einem StringBuffer basteln kannst (auch, wenn es vielleicht ein wenig umständlich ist).


----------



## trmx (19. Aug 2010)

In SQL gibt es auch Befehle mit denen man ein Datumsobjekt "manipulieren" bzw. nur einzelne Komponenten verwenden kann.

zB
Das Feld "datum" in der Datenbank in einer Tabelle ist vom Typ Date. Dann kann man mit year(datum) und month(datum) jeweils
die entsprechenden werte Abfragen. Es ist dabei egal wie das Datum in der Datenbank intern gespeichert ist und du mußt
keine Datumsobjekte in der richtigen Form die die Datenbank versteht "zusammenbasteln".

Eine Abfrage könnte dann so aussehen

[Java]
int gewuenschtesJahr=2010;
int gewuenschterMonat=5;

PreparedStatement ps = conn.prepareStatement("select * from tabelle where year(datum)=? and month(datum)=?");
ps.setInt(1,gewuenschtesJahr);
ps.setInt(2,gewuenschterMonat);
ResultSet rs = ps.executeQuery();
....
[/code]


----------



## XHelp (19. Aug 2010)

Optional kannst du auch SELECT * FROM bla WHERE dataum>="2010-X-01" AND datum<"2010-(X+1)-01" machen


----------

