# PHP und MSSQL Datetime



## kesnw (24. Mai 2005)

Hi,

ich nutze eine MSSQL DB und in einer meiner Tabellen möchte ich das Änderungsdatum der Zeilen speichern (Datentyp datetime). Das funktioniert soweit auch. Wenn ich das Datum aber auslese, dann möchte ich nur das Datum und nicht die Uhrzeit anzeigen lassen. Wie geht das? In der DB steht z.B. 24.05.2005 und die Ausgabe ist dann komischerweise "2005-05-04 00:00:00".

1. Warum wird das nicht in dem Format ausgegeben wies in der DB steht?
2. Wie bekomme ich es hin nur das Datum ausgeben zu lassen?

Die Datentypen in MSSQL bringen mich noch zur Weißglut.. MySQL ist da weitaus verständlicher....


----------



## Riedel19 (24. Mai 2005)

Du kannst doch das Datum kopmplett in eine Variable lesen und diese dann mit substr aufteilen...

 Hab das mal so gemacht in einem Skript von ir.

 $jahr=substr($row[8],0,4);
 $monat=substr($row[8],5,2);
 $tag=substr($row[8],8,2);
 $uhrzeit=substr($row[8],11,8);

 Vielleicht hilft das ja weiter, ist aber bestimmt nicht die sauberste Lösung...


----------



## Ben Ben (24. Mai 2005)

@Riedel: viel zu umständlich und unperformant bei vielen Daten.

Sinnvoller ist hier beim Auslesen die mysQL-Funtkion DATE_FORMAT() zu verwendnen. Die genaue Syntax kannst du dem Onlinemanual unter http://dev.mysql.com/doc/mysql/en/date-and-time-functions.html
Sinnvoll wäre es im Select dann hinter DATETIME() noch ein AS `feldname` zu setzen, damit du den originalen Feldnamen abfragen kannst.


----------



## kesnw (24. Mai 2005)

Ok, hört sich gut an. Hab nun aber einen error im Select:

Die Spalte in der das Datum stehet heißt "change_date"


```
$result['module3_fill'] = "SELECT deadline, quantity, quality, date_format(change_date, '%Y-%m-%d') AS cd FROM ratios WHERE number = '".$_GET['number']."'";
```

In den Beispielen wird nie der Spaltenname, sondern ein Wert angegeben, was ja vollkommen unlogisch ist...


----------



## kesnw (24. Mai 2005)

Kanns sein, dass das in MSSQL nicht funktioniert


----------



## kesnw (24. Mai 2005)

Habe folgendes gefunden:


```
$result['module3_fill'] = "SELECT deadline, quantity, quality, convert(datetime,convert(char(10),change_date,104)) as cd FROM ratios WHERE number = '".$_GET['number']."'";
```

Jetzt wird 1900-01-01 00:00:00.000 ausgegeben. Super


----------



## dwex (24. Mai 2005)

Hallo,

also wenn es Tatsächlich so (24.05.2005) in der DB steht - warum gibst du dann nicht einfach den Inhalt aus.
Also:

```
$ausgabe = mysql_fetch_assoc($dbabfrage);
echo $ausgabe['spaltenname-datum'];
```

Ich würde dir aber empfehlen das ganze als MYSQL-DATE oder DATETIME in die SQL-Tabelle zu speichern.

Du könntest dann eine Abfrage wie diese hier "basteln":

```
$abfrage = mysql_query("SELECT datum, DATE_FORMAT( datum, 'd.%m.%Y' ) AS datumneu FROM deinetabelle WHERE 1");
```
oder so ähnlich.

Das ganz könntest dann mit folgendem Code ausgeben:

```
$row = mysql_fetch_assoc($abfrage);
echo $row['datumneu'];
```

Also ich habe jetzt mal auf die While-Geschichte usw. verzichtet - auch müsstest du natürlich deine SQL-Abfrage noch auf deine bedürfnisse verfeinern.

Ausserdem würde ich dir MySQL-Datums- und Zeitfunktionen ans Herz legen


----------



## Jörg Rißmann (24. Mai 2005)

Wer lesen kann, ist klar im Vorteil.

Nochmal: Der Autor hat ein Problem, welches *nur* in m*S*sql auftritt!
Also im Microsoft SQL-Server und nicht mySQL


----------



## dwex (24. Mai 2005)

Uuuups sorry,

hab ich doch tatsächlich voll überlesen.
*duck und wech*


----------



## kesnw (24. Mai 2005)

Habs jetzt mal mit date() von PHP versucht, also:


```
echo $module3_fill->change_date;
echo "<br>";
echo date("Y-m-d",$module3_fill->change_date);
```

Ausgabe:
2005-01-01 00:00:00
1970-01-01

HÄ


----------

