Von Datetime Feld nur Date anzeigen

retok

Angesehenes Mitglied
Ich dachte eigentlich es sei ein triviales Problem, habe aber bislang keine simple Lösung gefunden.

Möchte mit einem SQL Query u.a. ein Feld vom Typ datetime auslesen, dabei aber nur das Datum ohne die Zeit im Resultset haben.

SELECT Name, Datum FROM Tabelle

Ich hätte irgendwie erwartet, das MS SQL Express hierfür einen coolen Befehl hat. Habe aber nichts gefunden. Bin auf meiner Suche nur auf so ganz komplizierte Lösungen mit Casting gestossen, das muss doch einfacher gehen?
 
Geht doch ganz einfach mit Convert:

QUOTE Convert(nvarchar(10), getdate(), 120) = 2008-09-12


QUOTE Convert(nvarchar(10), getdate(), 104) = 12.09.2008


Oder nur die Uhrzeit:


QUOTE Convert(nvarchar(5), getdate(), 108) = 14:35


Das generiert allerdings Textdaten.

http://www.sql-und-xml.de/server-daten/sql...st-convert.html

In einer .NET-Umgebung macht man das meistens anders: Man legt erst bei der Anzeige in der Html-Seite fest, wie die DateTime-Spalte ausgegeben wird. Dann hat man innerhalb des Codes noch bsp. die Sortierung nach Datum/Uhrzeit.
 
QUOTE (jAuer @ Sa 13.09.2008, 14:40) Geht doch ganz einfach mit Convert:


QUOTE Convert(nvarchar(10), getdate(), 120) = 2008-09-12


QUOTE Convert(nvarchar(10), getdate(), 104) = 12.09.2008


Oder nur die Uhrzeit:


QUOTE Convert(nvarchar(5), getdate(), 108) = 14:35


Das generiert allerdings Textdaten.

http://www.sql-und-xml.de/server-daten/sql...st-convert.html

In einer .NET-Umgebung macht man das meistens anders: Man legt erst bei der Anzeige in der Html-Seite fest, wie die DateTime-Spalte ausgegeben wird. Dann hat man innerhalb des Codes noch bsp. die Sortierung nach Datum/Uhrzeit.


QUOTE Convert(nvarchar(10), getdate(), 104) = 12.09.2008


Danke... blöde Frage aber: Wie verwende ich das in einem SELECT? Wo kommt da der Feldname rein? getdate(Feldname)?


QUOTE
In einer .NET-Umgebung macht man das meistens anders: Man legt erst bei der Anzeige in der Html-Seite fest, wie die DateTime-Spalte ausgegeben wird. Dann hat man innerhalb des Codes noch bsp. die Sortierung nach Datum/Uhrzeit.


Ich verwende es unter Asp.Net. Habe ich auch schon gedacht, erst beim Anzeigen die Zeit abzuschneiden. Habe aber auch dafür keine Lösung gefunden, wie ich in einem GridView->BoundField Einfluss auf die Variablenformatierung habe. Weisst Du das?
 
QUOTE (retok @ Sa 13.09.2008, 14:03)Wie verwende ich das in einem SELECT? Wo kommt da der Feldname rein? getdate(Feldname)?


Da, wo getdate() steht und das aktuelle Datum reinsetzt. Also


QUOTE Select A.Id, Convert(nvarchar(10), A.Datum, 120) As Tag
From Tabelle As A




QUOTE (retok @ Sa 13.09.2008, 14:03)Ich verwende es unter Asp.Net. Habe ich auch schon gedacht, erst beim Anzeigen die Zeit abzuschneiden. Habe aber auch dafür keine Lösung gefunden, wie ich in einem GridView->BoundField Einfluss auf die Variablenformatierung habe. Weisst Du das?


Äh ja, ich verwende ASP.NET 'etwas unkonventionell'. Ich nutze nämlich all diese vorgefertigten Objekte nicht, sondern habe entweder eigene Objekte, die in ihrer eigenen Render-Methode Html-Output generieren oder die Seite ist einer Klasse zugeordnet, deren Render-Methode ein Html-Gerüst mit Xml-Fragmenten aus der Datenbank über eine Xsl-Transformation nach Html transferiert.

Nach einem Blick in die Doku: Eventuell ist die Eigenschaft DataFormatString die richtige.

Setze da mal


QUOTE dd.MM.yyyy


rein, wobei der Select-Befehl nur die Spalte 'A.Datum' zurückgibt, so daß die Spalte vom Datentyp DateTime ist.

Ich bin mir allerdings nicht ganz sicher, ob das die richtige Stelle ist. Es könnte auch sein, daß man das schon direkt im DataTable.DataColumn - Objekt festlegt - per Expression - Eigenschaft. Im Prinzip müßte das irgendwo möglich sein. Ich hole mir die Werte eben oft per .ToString() und ergänze dann dort die Formatierung. Oder das wird auf der Basis einer Xml-Darstellung gemacht.
 
Danke für die ausführliche Erklärung. Ich verwende auch nicht immer die vorgefertigten Objekte, aber für gewisse einfache Tasks finde ich sie eigentlich sehr praktisch.

Ueber Deinen Hinweis betreffend DataFormatString habe ich dann eine einfache Lösung gefunden:

Im BoundField-Objekt diesen Paramenter einfügen: DataFormatString="{0:d}"

Und jetzt zeigts nur noch das Datum an.


 
Zurück
Oben