[SQL] Verschil in datums in juist formaat

Pagina: 1
Acties:
  • 155 views sinds 30-01-2008
  • Reageer

  • stfn345
  • Registratie: Januari 2000
  • Laatst online: 00:04
Ten eerste: ik heb googled,gotsearched,faq'ed etc, maar ik kom er niet uit:

Laat ik even kort uitleggen wat mijn probleem is:

Ik heb een login systeem waarin de logins worden gelogged in MSSQL (SQL Server. Geen probleem. Hij slaat ze echter op in een non-standard formaat nl.:

20040212090641 [jaar][maand][dag][uur][minuut][seconde]

Het formaat van input kan ik helaas niet meer wijzigen (don't ask)

Bij elke row heb ik 2 van die timestamps, ik zou graag willen zien hoelang iemand is ingelogged (row2 - row1) echter kan ik ze niet zomaar van elkaar aftrekken want dan komen er hele rare dingen uit. Het liefst zou ik een formaat zien als "1 Dag(en), 4 uur, 14 min", maar ik kom er niet uit.

Ik parse ze nu met substrings in een datetime:

code:
1
2
3
4
CAST(SUBSTRING(a.datetimef, 5, 2) + '-' + SUBSTRING(a.datetimef, 7, 2) + 
'-' + SUBSTRING(a.datetimef, 1, 4) + ' ' + SUBSTRING(a.datetimef, 9, 2) +
':' + SUBSTRING(a.datetimef, 11, 2) + ':' + SUBSTRING(a.datetimef, 13, 2)
AS datetime)


Ook hier geen probleem. Dit doe ik 2 maal (voor de datum1 en datum2)

De uitkomst die ik graag zou willen hebben is een nieuwe tijd (het verschil tussen de datetimes)
Ik heb datediff geprobeerd, maar die laat bijvoorbeeld alleen het aantal seconden
zien, OF het aantal minuten, OF uren etc. ( dus bijvoorbeeld 3634 seconden, maar niet 1 uur en 34 minuten)

Ik ben een beetje radeloos nu :)

[ Voor 30% gewijzigd door stfn345 op 16-02-2004 10:46 . Reden: waarom is hij bij 'bekijk bericht' wel in de goede layout en bij verstuur niet meer? ]


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 22:24

gorgi_19

Kruimeltjes zijn weer op :9

Kan je geen UDF maken, welke de datediff in seconden omzet naar het door jou gewenste formaat?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • stfn345
  • Registratie: Januari 2000
  • Laatst online: 00:04
Een UDF? Gokje: univeral date format oid ? waar kan ik dat doen?

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 22:24

gorgi_19

Kruimeltjes zijn weer op :9

RaZoRhEaD schreef op 16 februari 2004 @ 10:41:
Een UDF? Gokje: univeral date format oid ? waar kan ik dat doen?
User Defined Function

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
UDF = User Defined Function.

https://fgheysels.github.io/


Verwijderd

Doe iets van

SELECT UNIX_TIMESTAMP(Time1)-UNIX_TIMESTAMP(Time2) AS TimeDiff FROM BLABLA


Nu bevat TimeDiff het verschil...

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 22:24

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op 16 februari 2004 @ 10:44:
Doe iets van

SELECT UNIX_TIMESTAMP(Time1)-UNIX_TIMESTAMP(Time2) AS TimeDiff FROM BLABLA


Nu bevat TimeDiff het verschil...
Klopt, maar nu heb je ook nog alleen het verschil in tijd.. :P DateDiff kan dat in principe ook en Unix_Timestamp wordt afaik niet door alle databases ondersteunt.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • stfn345
  • Registratie: Januari 2000
  • Laatst online: 00:04
gorgi_19 schreef op 16 februari 2004 @ 10:46:
[...]

Klopt, maar nu heb je ook nog alleen het verschil in tijd.. :P DateDiff kan dat in principe ook en Unix_Timestamp wordt afaik niet door alle databases ondersteunt.
Unix_TIMESTAMP wordt niet herkend in SQL server.

EDIT: SQL moet zelf toch wel zoiets kunnen doen ipv een UDF?

[ Voor 9% gewijzigd door stfn345 op 16-02-2004 10:52 ]


Verwijderd

RaZoRhEaD schreef op 16 februari 2004 @ 10:49:
[...]
Unix_TIMESTAMP wordt niet herkend in SQL server.
:X

  • stfn345
  • Registratie: Januari 2000
  • Laatst online: 00:04
Kijk, aan zon antwoorden heb ik tenminste iets :>

EDIT: heb het antwoord al..
het was ....*tromgeroffel* -
Met '-' kon je ze gewoon van elkaar aftrekken :) en ik maar op de MS way denken.

EDIT2: Weet nog iemand ff snel hoe ik van een datetime (1900-01-01 01:00:46) Alleen de tijd kan laten zien?

[ Voor 50% gewijzigd door stfn345 op 16-02-2004 12:06 ]


  • jvdmeer
  • Registratie: April 2000
  • Laatst online: 27-05 15:32
RaZoRhEaD schreef op 16 februari 2004 @ 11:26:
[...]


EDIT2: Weet nog iemand ff snel hoe ik van een datetime (1900-01-01 01:00:46) Alleen de tijd kan laten zien?
Probeer iets als
code:
1
CONVERT(VARCHAR(8),[veld],112)

Waarbij ik de 112 uit mijn hoofd doe. Binnen 'Query Analyzer'-help zoeken naar CONVERT levert de juiste waarde op.

[ Voor 5% gewijzigd door jvdmeer op 16-02-2004 13:04 ]

Pagina: 1