[MSSQL] aantal dagen => datum (omgekeerde datediff) ?

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

  • Chillz
  • Registratie: Augustus 2001
  • Laatst online: 17:47
Een datediff verteld je het aantal dagen tussen 2 ingegeven datums,
maar nu wil ik het omgekeerde doen...

Ik heb twee kolommen met getallen in een database,
ze worden omschreven als
kol1 = aantal dagen sinds 1 januari 1600
kol2 = aantal secondes sinds 1 januari 1970

in kolom 1 staat nu dus bijvoorbeeld: 146715

maar ik wil via een query hier de juiste datum tonen
(in het geval van 146715 dus ergens in december 2001)

volgens mij moet dit wel te doen zijn,
maar als je gaat zoeken op 'date' of 'number' enzo dan krijg je nogal heel veel (irrelevante) uitkomsten,
Wie weet welke functie ik moet gebruiken?

Leeg - Sinds 20180907


  • whoami
  • Registratie: December 2000
  • Laatst online: 17:38
AddDays oid.
Welk DBMS gebruik je?

Waarom sla je die gegevens zowiezo niet op als een datum?

https://fgheysels.github.io/


  • Chillz
  • Registratie: Augustus 2001
  • Laatst online: 17:47
Ik gebruik SQL Server 2000
(sorry, had ik er gelijk bij moeten zetten)

Waarom ik het niet gelijk zo heb opgeslagen?
omdat ik niets opsla
da's heel makkelijk. Ik heb deze database overgezet vanuit Oracle naar SQL Server
(ja, dat doe ik bewust, dat schijnt nodig te zijn :) )

Dus dat getal dat stond er al, nu wil ik het echter terug zien als een datum

Leeg - Sinds 20180907


Verwijderd

dat is je tijd gerekend vanaf een bepaald tijdstip.

Je kunt ze opvragen en dan converteren naar een DATE() type. Dat kan in zowat iedere taal (ook in ASP)

Verwijderd

Welke taal programmeer je in?

In php bijvoorbeeld kun je strtotime() gebruiken.

  • Chillz
  • Registratie: Augustus 2001
  • Laatst online: 17:47
SQL

maar als ik zeg:
Select DATE(kol1)
from tabel

dan krijg ik dus mooi de mededeling dat 'Date' geen geldige functie is...

Leeg - Sinds 20180907


  • avon
  • Registratie: November 2002
  • Laatst online: 27-06-2025
Chillz schreef op 22 oktober 2003 @ 15:20:
SQL

maar als ik zeg:
Select DATE(kol1)
from tabel

dan krijg ik dus mooi de mededeling dat 'Date' geen geldige functie is...
Dat kan je ook pas later doen, nadat je de waarde uit je tabel hebt gehaald ;)

Gratis webwinkel beginnen? Met Onetoshop.com kunt u direct beginnen!


  • Chillz
  • Registratie: Augustus 2001
  • Laatst online: 17:47
zou kunnen,
maar ik wil m dus eigenlijk wel in mn SELECT-statement plaatsen,
zodat ik het geheel in een view op kan nemen.

niemand een oplossing?

ik lees hier (Books Online) namelijk wel dat SQL Server 1/1/1900 ziet als zijnde '0'

ergens moet ik m dus in geven dat hij 1/1/1600 als '0' waarde moet zien,
vervolgens moet hij het aantal dagen dat ik ingeef daarbij optellen en terugrekenen naar een normale weergave van een datum...
Moet toch kunnen?

Leeg - Sinds 20180907


  • whoami
  • Registratie: December 2000
  • Laatst online: 17:38
Chillz schreef op 22 oktober 2003 @ 15:20:
SQL

maar als ik zeg:
Select DATE(kol1)
from tabel

dan krijg ik dus mooi de mededeling dat 'Date' geen geldige functie is...


Tja, je zult hier niet altijd direct werkende code krijgen. Meestal gaat het om het idee.
Zoek eens in de Books Online van Sql Server de functie op waarmee je iets naar een date kunt casten. ( Kijk eens naar CONVERT en CAST )

https://fgheysels.github.io/


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
De dateadd functie kun je hiervoor gebruiken

Oops! Google Chrome could not find www.rijks%20museum.nl


  • Chillz
  • Registratie: Augustus 2001
  • Laatst online: 17:47
Okay,

de dateadd heeft me geholpen,
code:
1
SELECT DATEADD(day, (kol1 - 55883), '1753-01-01') AS datum


tricky part is alleen dus dat er in mijn database geteld wordt vanaf 1 jan 1600, terwijl SQL Server niets eerder dan 1753 kent/ wil kennen... die dagen moest ik er dus nog eens zelf vanaf halen...
nu komt hij echter wel uit...

mijn uitkomst voor "147348" ziet er nu zo uit:

2003-06-05 00:00:00.000

Hij geeft dus een datetime in het veld weer
(weet iemand voor mij hoe ik hier alleen de datum neerzet?

Pfff, nu moet ik dit dus nog gaan zitten uitvogelen voor eenzelfde situatie
maar dan wat lastiger denk ik...
"minuten vanaf 1-1-1970" leuk :|

Leeg - Sinds 20180907


  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

Chillz schreef op 22 October 2003 @ 17:03:
2003-06-05 00:00:00.000

Hij geeft dus een datetime in het veld weer
(weet iemand voor mij hoe ik hier alleen de datum neerzet?
Waarom zou je dat willen? Bij het ophalen van je data kan je het gewenste format opgeven. Zie CONVERT in de BOL (style argument).
Chillz schreef op 22 October 2003 @ 17:03:
Pfff, nu moet ik dit dus nog gaan zitten uitvogelen voor eenzelfde situatie
maar dan wat lastiger denk ik...
"minuten vanaf 1-1-1970" leuk :|
Lijkt me nu juist makkelijker, zit je in ieder geval niet met de ondergrens van het datetime type waardoor je zelf moet gaan rekenen.

Today's subliminal thought is:


  • Chillz
  • Registratie: Augustus 2001
  • Laatst online: 17:47
Annie schreef op 22 October 2003 @ 20:40:
Waarom zou je dat willen? Bij het ophalen van je data kan je het gewenste format opgeven. Zie CONVERT in de BOL (style argument).

[...]

Lijkt me nu juist makkelijker, zit je in ieder geval niet met de ondergrens van het datetime type waardoor je zelf moet gaan rekenen.
Die Convert moet best wel lukken ja,
want ookal als ik het niet verander, dan komt het in de rapportage wel goed.

minuten vanaf 1970 rekenen lijkt me best lastig,
juist omdat ik dan met schrikkeljaren ook rekening moet gaan houden

maar ik ga me dr vanmiddag mee bezig houden, kijken of ik eruit kom...
(moet het iig eerst naar dagen omzetten, en dan werkt misschien dezelfde berekening als bij de eerste ook wel :? )

Leeg - Sinds 20180907


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Minuten is niet moeilijker dan dagen hoor, dateadd kan met jaren, kwartalen, maanden, dagen, weken, ure, minuten, seconden en miliseconden overweg.

Misschien zou je de docs eens moeten lezen.

Oops! Google Chrome could not find www.rijks%20museum.nl


Verwijderd

tijd weghalen moet eigenlijk automatiosch gebeuren in SQL server 2000. Als je een datum pakt dan zegtie automatisch: 0:00:00 (die laat hij weg, maar alks je full date vraagt krijgh je het erbij)

Je zou in de tabel eigenschappen het veld van je datum aan moeten passen. Daar kan je aangeven hoe je datum eruit ziet (Long/short ed) in je tabel en hoe deze geparsed wordt.


Ander kan je altijd nog op een later tijdstip een " " opzoeken en dan het stuk ervoor gebruiken! Of je schrijf ff een stukje code dat je datum leest, de tijd eruit sloopt en weer terug schrijft (kan met simpoel ASP ofzo!)

  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

No offence, Gertsan, maar naast het feit dat ik je tekst niet overal kan volgen geef je ook een aantal punten die helemaal niet aan de orde zijn of ze zijn (imho) complete onzin :).
De wijze waarop mssql de datum opslaat (en dat is overigens niet het formaat zoals je dat ziet in de QA of de EM) zou helemaal niets moeten uitmaken. Zoals al eerder vermeld kan je de presentatie op verschillende manieren naar eigen smaak inrichten. En zoeken op spatie is daar misschien 1 van, maar niet de meest zinnige ;)

Today's subliminal thought is:

Pagina: 1