Avatar billede clausn Nybegynder
18. december 2006 - 21:55 Der er 10 kommentarer og
1 løsning

Formatering af dato

Hej eksperter,

Jeg har et felt i en sql2k db.. Feltet er af typen varchar(25) og kan indeholde følg. dato med plinger omkring:

'30-11-2006 14:01:45'

Jeg har en anden kolonne af typen datetime og ønsker at lave en update således at datoen bliver konventeret til det nye felt.

Har prøvet diverse CONVERT funktioner, men ikke lige noget der har virket..

SUBSTRING(TempDato, 2, 19) <- dette piller datoen ud, men det er jo stadig tekst...

Hilsen
Claus
Avatar billede arne_v Ekspert
19. december 2006 - 01:33 #1
har du proevet

UPDATE tabelnavn SET datetimefelt = CAST(varcharfelt AS DATETIME)

?

hvis nej - saa proev den

hvis ja - saa lave noget streng manipulation inden du caster
Avatar billede clausn Nybegynder
19. december 2006 - 08:31 #2
CAST(SUBSTRING(TempDato, 2, 19) AS DATETIME)

Ovenstående giver mig:
The conversion of a char type is a datetime data type resulted in an out-of-range datetime..

Andre forslag?
Avatar billede mbagge Nybegynder
19. december 2006 - 08:54 #3
Mon ikke du skal have converteret til uk datetime format?

Jeg bruger ikke mssql så meget men mon ikke du kan opbygge via year(), month() osv eller  måske noget datepart

ala set timestamp = year(tempdato) & ' ' & month(tempdato) osv...

/Bagge
Avatar billede clausn Nybegynder
19. december 2006 - 09:27 #4
Nu har jeg følg.:
SELECT *,  CAST(CONVERT(DATETIME, SUBSTRING(TempDato, 8, 4) + '-' + SUBSTRING(TempDato, 5, 2) + '-' + SUBSTRING(TempDato, 2, 2) + ' ' + SUBSTRING(TempDato, 13, 8), 102) AS DATETIME) AS TestDato

Dette virker også fint nok - hvis jeg sætter IsDate() om den, er resultatet 1 ud for alle datoer.

Hvis jeg prøver at sætte det ind i et dato felt får jeg følg. fejl:
Syntax error converting datetime from charter string
Avatar billede mbagge Nybegynder
19. december 2006 - 09:36 #5
Måske du skal starte med at checke i hvilket format datetime skal indsættes.
Dernæst forsøge med noget i stil med ovenstående, blot tilrettet til det præcise format.

Hvis det er en onetime konvertering kan du måkse 'snyde lidt' og lave en select, loope igennem alle records og for hver record opbygge og update datetime i det format der skal bruges?

/Bagge
Avatar billede clausn Nybegynder
19. december 2006 - 09:42 #6
Hvordan kan jeg se i hvilket format datetime skal indsættes?

Jeg skal bruge det til en DTS pakke der skal importere data fra en CSV fil flere gange i døgnet.
Avatar billede mbagge Nybegynder
19. december 2006 - 09:46 #7
Kan du ikke lave en test update/insert i database fra asp/php eller hvad du nu bruger?

Hvis du har et db tool hvor du kigger direkte i basen, kan du via dette kigge i et timestamp felt og se formatet
Avatar billede clausn Nybegynder
19. december 2006 - 10:02 #8
Jeg bruger SQL Server Enterprise Manager.. Jo, må lige have et asp script.
Avatar billede mbagge Nybegynder
19. december 2006 - 10:05 #9
I enterprise manager kan du bare kigge på et datetime felt, så kan du se formatet der
Avatar billede clausn Nybegynder
18. september 2007 - 15:57 #10
Lukkes...

mbagge > Vil du have nogle points eller skal jeg bare lukke det?
Avatar billede mbagge Nybegynder
18. september 2007 - 16:14 #11
nej behold du bare dem :)

/Bagge
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester