[SQL] Tekst converteren naar datum

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

  • Toink
  • Registratie: Januari 2000
  • Niet online
Hoi,

Nou hier is een datumvraag zoals ik die nog niet in de search heb kunnen vinden, dus vandaar dat ik 'm maar eens post na een middagje zoekwerk.

Eigenlijk heb ik de oplossing al maar ik heb 't idee dat ie 't precies verkeerd om doet....maar misschien kent iemand de functie en kan die persoon mij vertellen wat ik fout doe. De feiten:

- ik heb een db met in een kolom een varchar[14] (fldDateInsert)

- formaat van fldDateInsert is: YYYYMMDDHHMMSS. Dit is de ODBC canonical standard en representeert de 120 in de volgende regel.

SELECT convert(varchar(14), fldDateInsert, 120) as datum
From tabel

- cast kun je ook gebruiken, maar volgens mij kun je dan die standaard weer niet selecteren:

SELECT cast(fldDateInsert as datetime(120)) as datum

Deze klopt syntactisch maar de conversie lukt niet. Zonder de 120 krijg ik (dus) hetzelfde effect.

- na heel veel prutswerk geeft deze query eindelijk output en.... het is precies hetzelfde als voorheen! Dus blijkbaar doe ik iets verkeerd om. Maar andersom werkt convert niet voor zover ik gelezen heb.

[ Voor 0% gewijzigd door Toink op 20-08-2002 15:50 . Reden: /cast ook even erbij ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:04
Waarom sla je de datum in de databank niet op in een DateTime oid ipv in een VARCHAR?

https://fgheysels.github.io/


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:04
Trouwens, lees misschien ook nog eens de Quickstart.

Leg eens duidelijk uit wat het probleem is, wat krijg je van output en wat wil je krijgen etc...

https://fgheysels.github.io/


  • Toink
  • Registratie: Januari 2000
  • Niet online
Uhh... whoami, omdat ik niets mag veranderen in de DB, anders deed ik dat natuurlijk wel. Ik dacht dat de uitleg wel duidelijk was om heel eerlijk te zijn. Ik krijg met een cast een foutmelding dat de conversie niet lukt, en met de convert geeft ie precies hetzelfde weer als toen ik begon. (dus gewoon een karakterveld met 14 karakters achter elkaar.)

De reden waarom ik datums wil krijgen ipv een string karakters is omdat ik die datums moet kunnen vergelijken met elkaar enzo. Dat gaat nogal lastig als het een karakterstring is. Bovendien moet die kolom in een view komen waarin 'een klant' moet kunnen kijken. Die wil geformatteerde data zien en geen zooi met karakters waar ie zelf wat uit mag halen.

[ Voor 0% gewijzigd door Toink op 20-08-2002 16:12 . Reden: nog meer info ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:04
Blijkbaar was je dus niet duidelijk. Je zegt nu dat je een foutmelding kreeg, dat vind ik niet terug in je openinspost. En wat is die foutmelding dan wel?
Over welk DBMS spreken we trouwens?

https://fgheysels.github.io/


  • Toink
  • Registratie: Januari 2000
  • Niet online
We spreken over MS SQL-server 2000. Zie ook dit topic voor een betere situatieschets:

[rml]Toink in "[ SQL] Simpele convert-actie.... :?"[/rml]

De foutmelding die ik krijg is "Syntax error converting Datetime from character string".

[ Voor 0% gewijzigd door Toink op 20-08-2002 16:24 . Reden: typo ]


  • cameodski
  • Registratie: Augustus 2002
  • Laatst online: 06-11-2023
Ik ben bang dat dit geen ODBC canonical standaard is.
Deze standaard is als volgt: yyyy-mm-dd hh:mm:ss

Om het in een voor SQL Server begrijpelijk formaat te krijgen, kun je dit het beste converteren naar het volgende formaat: yyyymmdd hh:mm:ss

Dit zul je mbv de substring functie uit elkaar moeten trekken om het vervolgens weer aan elkaar te plakken.

Never underestimate the power of


  • Toink
  • Registratie: Januari 2000
  • Niet online
Aha, zou het dat dan zijn... Die substring hebben we uiteraard vaker gezien :) :) dus dan gaan we die ff checken en kijken of 't werkt!

Trouwens, zou je niet zelf een formaat op kunnen geven bij conversie ipv die nummertjes? Dat zou zoooo veel schelen.....

  • Toink
  • Registratie: Januari 2000
  • Niet online
Opgelost! Er zal vast nog ooit iemand zijn die dit stukje code wil hebben dus bij deze:

code:
1
2
3
4
5
6
7
8
SELECT 
convert(datetime, substring(tbdDocument.fldDateInsert,1,4) 
+ '-' + substring(tbdDocument.fldDateInsert,5,2) 
+ '-' + substring(tbdDocument.fldDateInsert,7,2)  
+ ' ' + substring(tbdDocument.fldDateInsert,9,2) 
+ ':' + substring(tbdDocument.fldDateInsert,11,2) 
+ ':' + substring(tbdDocument.fldDateInsert,13,2), 120) 
as Invoerdatum
Pagina: 1