Black Friday = Pricewatch Bekijk onze selectie van de beste Black Friday-deals en voorkom een miskoop.
Toon posts:

[SQL] Specifiek omzetten naar datum

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo,

ik heb een kolom waar meestal datums in staan (yyyymmdd), maar het kan zijn door een foute invoer dat hier ook andere gegevens in staan.

Nu moet ik gaan rekenen met de datum. (aantal dagen van die datum tot nu)

Eerst omzetten naar dd-mm-jjjjj, dit is niet moeilijk, maar dit doet hij voor alles. Er staan ook teksten in dit veld en dan krijg ik natuurlijk een foutmelding.

Is er een manier om ervoor te zorgen dat hij alleen bijvoorbeeld 20080220 pakt, dus 8 tekens? Standaadr teksten zoals TEST kan ik eruit halen:
code:
1
WHERE DATUM <>'TEST'


Ik werk met SQL 2000 enterprise. Iemand een idee?

Verwijderd

Een regex op het veld toepassen een optie?

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

SQL2000 heeft vast wel een length functie, dus length(datum)=8.
Maar daar ondervang je ook niet alles mee. Je kunt nog een check doen met een instring achtige functie op andere tekens dan cijfers.
Hoe dan ook het is ellende en dat is omdat het gegeven in een verkeerd datatype opgeslagen wordt.

Who is John Galt?


Verwijderd

Topicstarter
justmental schreef op dinsdag 01 juli 2008 @ 11:07:
SQL2000 heeft vast wel een length functie, dus length(datum)=8.
Maar daar ondervang je ook niet alles mee. Je kunt nog een check doen met een instring achtige functie op andere tekens dan cijfers.
Hoe dan ook het is ellende en dat is omdat het gegeven in een verkeerd datatype opgeslagen wordt.
Dat het verkeerd is, weet ik. Daar kan ik nu niks meer aan veranderen.

LENGTH doet het inderdaad. Daar kan ik nu mijn WHERE query om gaan schrijven.

Bedankt!

[ Voor 7% gewijzigd door Verwijderd op 01-07-2008 11:19 ]


Verwijderd

Topicstarter
Verwijderd schreef op dinsdag 01 juli 2008 @ 11:06:
Een regex op het veld toepassen een optie?
een wat? Die ken ik niet

  • foske
  • Registratie: Juli 2001
  • Laatst online: 10-11 10:50
Nog even ter notitie, ik denk dat er iets structureels niet klopt als je datetime waardes als varchar opslaat, maar goed, daar ging de vraag niet over.

Je kan gebruik maken van ISDATE() die geeft 1 terug als de waarde te converteren is naar een datum, en 0 als het niet het geval is:

select ISDATE('20080101'), ISDATE('test')

geeft 1,0

Verwijderd

Topicstarter
foske schreef op dinsdag 01 juli 2008 @ 11:19:
Nog even ter notitie, ik denk dat er iets structureels niet klopt als je datetime waardes als varchar opslaat, maar goed, daar ging de vraag niet over.

Je kan gebruik maken van ISDATE() die geeft 1 terug als de waarde te converteren is naar een datum, en 0 als het niet het geval is:

select ISDATE('20080101'), ISDATE('test')

geeft 1,0
Die werkt, maar dan moet je een IF THEN maken om de query heen, kan dat?

  • foske
  • Registratie: Juli 2001
  • Laatst online: 10-11 10:50
Ik zou het zo doen:

code:
1
SELECT CONVERT(datetime, col) FROM table1 WHERE ISDATE(col) = 1

  • dominic
  • Registratie: Juli 2000
  • Laatst online: 02-11 11:36

dominic

will code for food

Mag ik vragen waarom je in hemelsnaam een datum opslaat in een kolom dat een ander datatype heeft dan 'datetime' of 'smalldatetime'?

Download my music on SoundCloud


Verwijderd

Topicstarter
foske schreef op dinsdag 01 juli 2008 @ 11:33:
Ik zou het zo doen:

code:
1
SELECT CONVERT(datetime, col) FROM table1 WHERE ISDATE(col) = 1
U bent goed! :+

bedankt, de select werkt nu, nu nog die datum van de huidige datum aftrekken voor het aantal dagen. Maar daar kom ik wel aan uit, hoop ik
Pagina: 1