Alleen datum weergeven bij select query

Status
Niet open voor verdere reacties.

voermanm

Gebruiker
Lid geworden
4 nov 2004
Berichten
36
Hallo Mensen,

Ik probeer een query uit te voeren, maar wanneer ik de input kijk zie ik bij de weergave van een datetime veld dat zowel de datum als tijd erin komt te staan, terwijl ik alleen maar een datum hebt ingevoerd (SQL server voert zelf een default time in).

Nu dacht ik een goede oplossing te hebben namelijk:

convert(datetime,'08/05/2004',105) //105 staat voor dd-mm-yy

Dit werkt ook alleen wil ik nu de datum nog gaan sorteren (ORDER BY). Nu sorteert ie dus op een varchar en niet op een date/time en dat is niet de bedoeling.

Heeft iemand hier een oplossing voor? Het gaat hier om een java programma waar als database SQL Server zit.

Zie voor meer info:

http://sqljunkies.com/Article/6676BEAE-1967-402D-9578-9A1C7FD826E5.scuk

Ik hoop dat iemand mij kan helpen.

Groet,

Menno
 
Persoonlijk ben ik niet zo'n voorstanden van de datum functies in SQL. Binnen SQL werkt het naar mijn mening "net goed" maar wanneer je erbuiten komt (in de scriptomgeving) dan levert het naar mijn mening veel problemen op. Velen zullen het niet met mij eens zijn, het is echt alleen een mening.

Ik los het op door geen datum te gebruiken maar een INT of Varchar(8). Het wordt wel eens als amerikaanse schrijfwijze uitgeled:

yyyymmdd
20060808

Het voordeel van deze manier van noteren is dat je altijd kunt sorteren op datum. Hoeverder de datum toeneemt hoe groter het getal wordt. Voor de komende 8000 jaar blijft het ook netjes in een varchar(8) passen dus dat is helemaal toppie.

De verwerkende scripttalen kunnen altijd omspringen met deze schrijfwijze. In PHP kun je met "strtotime("yyyymmdd-variabel")" een timecode generen waar de rest van de variabelen weer mee om kunnen gaan.

Ik denk dat dus dat wanneer je die schrijfwijze gebruikt je in Java ook beter met de var kan omgaan.

wout
 
Sorteer je dan op de kolom waar die datum in staat, of sorteer je op de uitkomst van jouw convert?

Met geval 1 bedoel ik:

SELECT CONVERT (datetime, KOLOMMETDATUM, 105) AS Datum //105 staat voor dd-mm-yy
ORDER BY Datum

Met geval 2 bedoel ik:

SELECT CONVERT (datetime, KOLOMMETDATUM, 105) AS Datum //105 staat voor dd-mm-yy
ORDER BY KOLOMMETDATUM

Ik meen me te herinneren dat het in geval 2 wel goed ging namelijk.

W.Sickman: Normaliter zou ik het met je eens zijn, maar op jouw wijze gooi je wel meteen een aantal checks op de correctheid van die datum weg. Als je die checks wilt behouden zul je dat in je applicatie moeten doen en daarmee laat je invoer controle niet over aan de server. Dit is mijn mening. In beide werkwijzen zul je aan hetzelfde eindresultaat komen.
 
Laatst bewerkt:
Hey Daget,

Dat ben ik eigenlijk wel met je eens. Je haalt inderdaad wat controle op dat punt weg. Het is op dat punt natuurlijk net waar je de controle wilt hebben, en soms is het in je SQL controleren nog niet eens zo´n gek idee! Ik gaat eens kijken of ik dat een keertje ergens toe kan passen.:thumb:

Wout
 
You're a brave person, wout. :)

Ik ben zelf verre van heilig hoor; ik heb ook genoeg pointers in objecten misbruikt als opslag voor een integer, maar later ben ik toch als vanouds gebeten door het aloude "vertrouw nooit input". Of die nou van gebruikers afkomt of van applicaties, geheid dat je app. daardoor een keer de mist ingaat.

Groet van Daget
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan