[MS SQL/.net] Time inserten in datetime veld, zonder datum

Pagina: 1
Acties:

  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 19-10 08:18
Oke wazige topictitel, maar ik zal het even uitleggen:

Ik maak gebruik van een DB van derden, die in hun wijsheid besloten hebben om twee kolommen te maken voor een datumtijd, jawel een 'datum' en een 'tijd'. Dat ze deze dan in beide gevallen van het type 'DateTime' moeten maken heeft ze niet aan het denken gezet of het wel een verstandige keuze was.

anyway:
nu is het zo dat ik een record moet inserten in deze DB.
Bij de 'datum' kolom kan ik netjes '2007-02-02' inserten als tekst, en dat komt er dan goed in te staan.
Bij de 'Tijd' kolom wil ik (dus) '15:30:00' inserten, in de hoop dat dit ook netjes goed gaat.

Echter plakt (waarschijnlijk) MSSQL er dan een datum voor. Dit is '01-01-1900'.
Alle andere records in de tabel laten in SQL Server Enterprise alleen een tijd zien. Het kan dus wel.

Nu zou je zeggen 'wat is het probleem eigenlijk als er een datum staat?'

nou, dat zal ik ook uitleggen:
Hun software doet heel netjes een ORDER BY datum, tijd, waardoor er dus netjes gesorteerd wordt.
Nu is het alleen zo dat mijn net geinserde row altijd bovenaan staat. De 'tijd' is namelijk kleiner dan de tijd uit de andere records.

Ik dacht eerst dat MSSQL gewoon een 'default' datum heeft, waarbij ze in de enterprise manager geen datum laten zien.
Dus wanneer ik een van de oude records uitlas, keek welke datum deze had, en vervolgens diezelfde datum samen met mijn tijd in de 'tijd' kolom duw, het probleem opgelost zou zijn.

Echter de datum die ik krijg wanneer ik hun 'tijd' colom uitlees is ook '01-01-1900'.
De datums zijn dus gelijk!

Toch zie ik in de enterprise manager wel mijn datum, maar niet die van hun..
Ook sorteert het programma nog altijd verkeerd.

Vraag is dan ook, hoe zorg ik dat ik een 'tijd' insert zonder dat daarbij de datum mee gaat. En ik zodoende hetzelfde resultaat krijg als wanneer ik in Enterprise Manager een record aanmaak. (dus alleen de tijd zie)

This message was sent on 100% recyclable electrons.


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Een DateTime veld in SQL Server is precies wat het zegt. Er kan geen datum zonder tijd of andersom ingevoerd worden. Dat jij in EM manager soms iets anders ziet ligt aan de formatting van EM. Intern in de database zal altijd een datum opgeslagen zijn.

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


  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Waarom insert je niet gewoon de echte datum?

{signature}


  • whoami
  • Registratie: December 2000
  • Laatst online: 00:54
BasieP schreef op woensdag 04 juli 2007 @ 11:01:
anyway:
nu is het zo dat ik een record moet inserten in deze DB.
Bij de 'datum' kolom kan ik netjes '2007-02-02' inserten als tekst
:X
Echter plakt (waarschijnlijk) MSSQL er dan een datum voor. Dit is '01-01-1900'.
Tja, SQL Server kent geen 'Time' data-type, wel een DateTime, en daar zit dus ook een 'datum' bij.
Alle andere records in de tabel laten in SQL Server Enterprise alleen een tijd zien. Het kan dus wel.
In Enterprise manager zie je dus enkel de tijd staan ?
Doe eens in Query Analyzer een select van dat tijd-veld, en kijk eens wat je daar terugkrijgt.

[ Voor 19% gewijzigd door whoami op 04-07-2007 11:05 ]

https://fgheysels.github.io/


  • purge
  • Registratie: November 2000
  • Niet online
Kijk eens naar de T-SQL functie CONVERT.
zie: http://msdn2.microsoft.com/en-us/library/ms187928.aspx

wellicht kan je iets in de trant van (ter illustratie)
SQL:
1
CONVERT( datetime, @datumtijd, 8 )

In mijn voorbeeld gaat het om de 'style' optie, in mijn geval 8. Deze converteerd je waarde naar het formaat hh:mi:ss. zie de msdn website van microsoft voor verdere documentatie.

@edit: Eerst testen dan posten :P

[ Voor 7% gewijzigd door purge op 04-07-2007 11:30 ]


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Dat kan niet, dat zou je alleen bij de select kunnen doen. De output van een CONVERT op een datetime met styleinformatie in tekst nl.

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


  • Kalentum
  • Registratie: Juni 2004
  • Laatst online: 07:17
Kun je niet een eenmalige conversieslag doen? Om van deze manier van werken af te komen?

  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 19-10 08:18
oke ondanks dat ik een heel verhaal heb getypt denk ik dat ik niet helemaal duidelijk ben geweest:
ik WEET dat in een datetime veld een datum en een tijd komt, en ik WEET dat dit niet anders kan.

ik leg in mijn startpost duidelijk uit wat mijn probleem is, en zoek dus een oplossing.

@voutloos, zoals in mijn startpost aangegeven, dat heb ik al geprobeerd.

@whoami:
Ik lees dat data uit een XML file, dus zodoende is tekst het makkelijst voor mij. conversie naar een datetime binnen mijn app is vrij nutteloos als de database hetzelfde ook doet wanneer je tekst invoert.

ik zal eens kijken wat de query analyzer zegt.

@purge:
das wel een goede, ga ik ook onderzoeken

@P_de_B:
nog even me startpost lezen ;) ik WEET dat het niet kan. dat is echter mijn probleem niet

@rutgerw:
helaas, het is een proces dat blijft draaien, en telkens nieuwe data vergaard

[ Voor 5% gewijzigd door BasieP op 04-07-2007 11:40 ]

This message was sent on 100% recyclable electrons.


  • Voutloos
  • Registratie: Januari 2002
  • Niet online
BasieP schreef op woensdag 04 juli 2007 @ 11:39:
@voutloos, zoals in mijn startpost aangegeven, dat heb ik al geprobeerd.
Ik zie dat dus niet in je startpost staan. ORDER BY date, time zou toch gewoon goed moeten gaan als beide kolommen dezelfde datetime bevatten?

{signature}


  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 19-10 08:18
Voutloos schreef op woensdag 04 juli 2007 @ 11:42:
[...]
Ik zie dat dus niet in je startpost staan. ORDER BY date, time zou toch gewoon goed moeten gaan als beide kolommen dezelfde datetime bevatten?
nee, want de applicatie die die tabel gebruikt insert zelf ook data, deze heeft een andere datum in het tijd veld, en een andere tijd in het datum veld, zodoende gaat het sorteren fout

De query analyser zegt trouwens dat de datum in de tijd colomn '1899-12-30' is, hoe mijn applicatie dan bij '1900-01-01' komt weet ik niet :S
maar ga iig even kijken wat er gebeurd wanneer ik dit insert.

[ Voor 18% gewijzigd door BasieP op 04-07-2007 11:48 ]

This message was sent on 100% recyclable electrons.


  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Log de exact door de app gebruikte queries en verander die tbv je handmatige actie?

[ Voor 4% gewijzigd door Voutloos op 04-07-2007 11:49 ]

{signature}


  • Nic
  • Registratie: April 2005
  • Laatst online: 21:11

Nic

Vrij

"The base date in Enterprise Manager (and some other Microsoft tools and applications) is 1899-12-30. EM should never be used for data entry, and rarely if ever for viewing data. If you use EM to specify time-only data, EM will store the date 1899-12-30. If you really want to use EM, specify the date 1900-01-01 explicitly. Note also that EM will only show the time portion if the date is 1899-12-30, not what you expect if you use 1900-01-01 as a standard value for date."

http://www.karaszi.com/SQ...atetime.asp#DtInSqlServer

  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 19-10 08:18
woei opgelost, door "1899-12-30" te gebruiken lukt het wel :)

vreemd trouwens dat Enterprise manager juist bij die datum de de datum niet laat zien.
en dat terwijl ze als default datum juist 1900-01-01 inserten.

[ Voor 17% gewijzigd door BasieP op 04-07-2007 12:01 ]

This message was sent on 100% recyclable electrons.


  • whoami
  • Registratie: December 2000
  • Laatst online: 00:54
BasieP schreef op woensdag 04 juli 2007 @ 11:39:
@whoami:
Ik lees dat data uit een XML file, dus zodoende is tekst het makkelijst voor mij. conversie naar een datetime binnen mijn app is vrij nutteloos als de database hetzelfde ook doet wanneer je tekst invoert.
Makkelijkst, misschien. Juist ? Zeker niet.
Kijk eens naar de XmlConvert class, en converteer die string je daar krijgt naar een DateTime, en insert die datum als een DateTime.

https://fgheysels.github.io/


  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 19-10 08:18
whoami schreef op woensdag 04 juli 2007 @ 12:28:
[...]
Makkelijkst, misschien. Juist ? Zeker niet.
Kijk eens naar de XmlConvert class, en converteer die string je daar krijgt naar een DateTime, en insert die datum als een DateTime.
en wat is het grote voordeel daarvan als ik vragen mag? ik zie eigenlijk alleen het nadeel, namelijk extra code die functionaliteit van je DBMS overneemt.

ow en 'onjuist' vind het het helemaal niet, want het DBMS snapt het. In dat geval is het toch juist?

[ Voor 10% gewijzigd door BasieP op 04-07-2007 12:33 ]

This message was sent on 100% recyclable electrons.


  • whoami
  • Registratie: December 2000
  • Laatst online: 00:54
Hoe ziet die datum in dat XML bestand er uit ?

https://fgheysels.github.io/


  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 19-10 08:18
whoami schreef op woensdag 04 juli 2007 @ 12:38:
Hoe ziet die datum in dat XML bestand er uit ?
yyyy-MM-dd
als jij bedoelt dat dit in een ander land misschien yyyy/MM/dd is of nog anders, ja dat klopt, echter snapt MSSQL dit wel allebij.
fout zou zijn wanneer het idd 'dd-MM-yyyy' was, want dan zou hij dag en maand misschien wel omdraaien.
Echter staan de servers in nederland, en zijn ze nederlands ingesteld. er is 100% garantie dat ze ook niet in 't buitenland mijn rare tooltje gaan gebruiken ;)

This message was sent on 100% recyclable electrons.

Pagina: 1