Avatar billede madssch Nybegynder
11. marts 2004 - 09:56 Der er 14 kommentarer og
1 løsning

Datetime og Millisekunder

Hej Eksperter!

Jeg har et datetime-felt i min tabel. Jeg harlæst, at denne skulle kunne håndtere millisekunder.

Forsøger jeg at sætte et tidspunkt ind med millisekunder får jeg en fejl med "typeuoverensstemmelse". Hvad kan dette skyldes?

På forhånd tak!
Avatar billede trer Nybegynder
11. marts 2004 - 10:00 #1
Muligvis har du defineret det som "shortdatetime" fremfor datetime.

typisk format for datotid med millisekunder kan du se i Books Online ved at slå op under CAST AND CONVERT - check fx konverteringskoden 113 der indeholder millisekunderne.
Avatar billede trer Nybegynder
11. marts 2004 - 10:00 #2
Ovenstående var naturligvis et svar :-)
Avatar billede madssch Nybegynder
11. marts 2004 - 10:16 #3
Ok. Skal jeg så bruge CAST eller CONVERT? - Og kan du give mig en mere menneskelig syntaks end den i Online Books?

Kunne forestille mig, at det var noget i denne stil, eller..?  :

CONVERT(datetime[8], myDateAndTime, 113)
Avatar billede trer Nybegynder
11. marts 2004 - 10:22 #4
du bruger konvert i select's for at sikre et bestemt format som tekst

select convert(varchar,mydateandtime,113)
from mytable

hvis det er i forbindelse med indsættelse kan du så gøre således

insert into mytable (mydateandtime)
values (convert(datetime,'01 jan 2004 22:13:01:253',113))
Avatar billede madssch Nybegynder
11. marts 2004 - 10:29 #5
Ok. Jeg har følgende kode:

strTidskodeStart = Request.Form("tidskode_start")
strVarighed = Request.Form("varighed")
   
strSql = "Insert Into programmer_bundter(afsnitId, navn, titel, tidskode_start, varighed, grafik)"
strSql = strSql & "Values("& intAfsnitId &",'"& Request.Form("navn") &"','"& Request.Form("titel") &"',Convert(datetime, '"& strTidskodeStart &"', 113),Convert(datetime, '"& strVarighed &"', 113),'"& strGrafik &"');"

Det mærkelige er, at jeg ikke længere får nogen fejl, men feltet i tabellen indeholder stadig ikke millisekunder..!

Hvad kan dette skyldes?
Avatar billede trer Nybegynder
11. marts 2004 - 10:33 #6
Har du Query Analyzer installeret?  Så prøv lige at lave et udtræk a la

select convert(varchar,tidskode_start,113)
from programmer_bundter

og se om du ikke får milisekunderne ud?

Det kan være at det er din ASP der fjerner dem.

Hvis så, så kan du også prøve at trække dem ud med en

select DATEPART(millisecond,tidskode_start)
from programmer_bundter
Avatar billede madssch Nybegynder
11. marts 2004 - 10:36 #7
Det vil jeg lige prøve.

Har lige opdaget, at hvis jeg indsætter "12:23:45:780" står der i tabellen "12:23:46". Den runder altså millisekunderne op eller ned..?
Avatar billede madssch Nybegynder
11. marts 2004 - 10:37 #8
Jo, Query Analyzer returnerer rigtigt nok millisekunderne!

Hvad så..?
Avatar billede trer Nybegynder
11. marts 2004 - 10:43 #9
Så er det din ASP (ado recordset) der af en eller anden grund fjerner milisekunder - prøv først at lave en CSTR(rs("tidskode_start") for udtræk - og ellers kan du simpelthen tilføje en ekstra kolonne i din select

select bla, bla, bla, tidskode_start, DATEPART(millisecond,tidskode_start) as ms
from programmer_bundter

når du skal have data retur.
Avatar billede madssch Nybegynder
11. marts 2004 - 10:46 #10
Fino. Kan jeg eventuelt lave:

"Select Convert(datetime, mydateandtime, 113) From tabelnavn" når jeg skal lave udtrækket?
Avatar billede trer Nybegynder
11. marts 2004 - 10:49 #11
Muligvis vil

Select Convert(varchar, mydateandtime, 113)
From tabelnavn

fungere (bemærk varchar og ikke datetime - du har jo allerede en datetime kolonne :-) - så bliver det nemlig en tekststreng du trækker ud og ikke en dato.

Men risikoen er, at ADO stadig genkender data som en dato - og så laver sin lille konvertering.

Derfor tror jeg mest på at du i ASP'en skal benytte en CSTR() når du vil bruge kolonnen.
Avatar billede madssch Nybegynder
11. marts 2004 - 10:51 #12
OK.

Tusind tak for hjælpen! Dine points er velfortjent!  ;-)
Avatar billede madssch Nybegynder
11. marts 2004 - 10:57 #13
Lige til din information, så løste jeg problemet med udtrækket på denne måde:

"Select id, navn, titel, Convert(varchar, tidskode_start, 113) AS myTime From programmer_bundter"

;-)
Avatar billede trer Nybegynder
11. marts 2004 - 11:17 #14
Fint, god fornøjelse med det :-)

Huskede du at markere mine initialer (så de blev blå) da du trykkede accept?
Avatar billede madssch Nybegynder
11. marts 2004 - 11:20 #15
Næh!  :D
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