# SQL Date Einträge an Tag x



## skuki (8. Dez 2015)

Hallo,

ich suche bitte eine Möglichkeit eine Abfrage zu gestalten die mir erlaubt alle Einträge die während des Tages x aufgenommen wurden abzurufen. 

In der Datenbank werden die Einzelnen Zeitpunkte im Format JJJJ-MM-TT HH-MM-SS gespeichert. Im Java Code habe ich die Queries immer per Hand gefüttert mit ... 

```
date(p.dateTo) BETWEEN '2015-12-06 00:00:00' AND  '2015-12-06 23:59:59'
```

Jetzt möchte ich aber einen Eingabeparameter verwenden alla 2015-12-06. Da ich jedoch in der Datenbank auch die Zeit habe, weis ich jetzt nicht wie genau ich dies bewerkstellige. Ein >= Date würde mir zu viele Ergebnisse liefern. = Date liefert mir leider nichts.

Gibt es eine Date - Funktion die man hier verwenden kann und ich übersehe? 

Vielen Dank für eure Hilfe!!


----------



## Thallius (8. Dez 2015)

Wie wäre es einfach mit


```
date(p.dateTo) BETWEEN CONCAT(:date," 00:00:00") ...
```

Wobei date dein prepared statement für dein eingegebenes Datum ist.

Gruß

Claus


----------



## skuki (8. Dez 2015)

Danke für den Tipp! So einfach aber komplett logisch 

Was ich jetzt nicht ganz verstehe:

```
BETWEEN CONCAT("2015-12-06","00:00:00") AND '2015-12-06 23:59:59'
```

funktioniert super.


```
BETWEEN CONCAT("2015-12-06","00:00:00") AND CONCAT("2015-12-06","23:59:59")
```

liefert nichts. Auch eine Klammer um das Ganze ändert nichts daran.


Bin auf die Lösung selbst gekommen.. - wenn auch durch Zufall 


```
BETWEEN CONCAT("2015-12-06,00:00:00") AND CONCAT("2015-12-06,23:59:59")
```

Wenn man sich das aber ansieht, ist es eh auch klar.

Vielen Dank für deine Hilfe!


*Nur noch kurz: *Was nehme ich hier am Besten als Eingabeparameter eine Java - Methode. Einen String der die Form JJJJ-MM-TT hat oder ein SQL Date? 

LG


----------



## Thallius (8. Dez 2015)

Mich wundert das das funktioniert. Sollte es eigentlich nicht. Selbst das erste Beispiel dürfte nicht gehen. Was Du machst ist zwei Strings zusammen zu fügen. In deinem ersten Beispiel entsteht also der String "2015-12-0600:00:00". Fällt Dir was auf?


----------



## skuki (8. Dez 2015)

Hat mich auch gewundert, da es auch nicht mit Absicht war sondern ein Eingabefehler von mir. Eventuell eine MySQL Eigenheit?


----------



## Tobse (15. Dez 2015)

Ich möchte hier noch drauf hinweisen, dass es die DATE-Funktion gibt, speziell by MySQL:


```
DATE(recorded_at) = ?
```


----------



## Thallius (16. Dez 2015)

Tobse hat gesagt.:


> Ich möchte hier noch drauf hinweisen, dass es die DATE-Funktion gibt, speziell by MySQL:
> 
> 
> ```
> ...



Wurde doch auch bereits vom TO verwendet. Er hat es nur klein geschrieben 

Gruß

Claus


----------



## Tobse (16. Dez 2015)

Thallius hat gesagt.:


> Wurde doch auch bereits vom TO verwendet. Er hat es nur klein geschrieben


Oh, richtig...  Er hat halt die Uhrzeiten im BETWEEN benutzt, was mit DATE() ja aber garnicht notwendig ist. Habs deswegen wohl nicht ganz wahrgenommen ...


----------

