Avatar billede mikse Nybegynder
30. december 2003 - 12:30 Der er 13 kommentarer og
1 løsning

Konvertering af sql datetime til unix Epoc

Hvorledes kan man konvertere et MSSQL Datetime felt (2003-11-19 10:30:00.000) til unix Epoch og tilbage igen?

mvh
Michael
Avatar billede trer Nybegynder
30. december 2003 - 12:37 #1
hvis din Epoch er standard (dvs. base 1 januar 1970) så kan du blot omregne til dage eller du kan trække din base fra sql-server tidspunktet og få forskellen.

ex datecol-convert(datetime,'1970 jan 1')

Det kan også gøres via funktionen datediff() (se Books Online).
Avatar billede trer Nybegynder
30. december 2003 - 12:39 #2
prøv datediff(dd,datecol,convert(datetime,'1970/1/1',111)
Avatar billede mikse Nybegynder
30. december 2003 - 12:57 #3
Hmmm
Arithmetic overflow error converting expression to data type datetime.

Jeg prøvede at fyre denne query af:
select
datediff(dd,create_date,convert(datetime,'1970/1/1',111)) from tickets_sc

Du manglede iøvrigt en parantes slut ) :-)

Tager jeg fejl eller returnere den kun antallet af dage eller hva.
iøvrigt har jeg min epoch datotid her:
1071696805 hvilket skulle være = 17 December, 2003, 22:33
Avatar billede mikse Nybegynder
30. december 2003 - 13:00 #4
Ups jeg kom til at prøve at konvertere epoch dato istedet, hvis jeg sender den imod SQL datetim returnere den antallet af dage.
men det er jo ikke epoch?
Avatar billede trer Nybegynder
30. december 2003 - 13:03 #5
Jeg har sat datediff til "dd" - dage - du kan bruge "hh" for timer, "mm" for minutter, "ss" for sekunder eller "ms" for milisekunder.

I kan du lave din omregning ved at caste din "create_date" til en double først - så skulle du have plads nok :-)
Avatar billede trer Nybegynder
30. december 2003 - 13:07 #6
Ah... "mi" for minutter - ikke "mm"
Avatar billede mikse Nybegynder
30. december 2003 - 13:18 #7
Nu er jeg tilsydenladen ikke særlig god til det her, jeg kan dælme ikke finde udaf at bruge cast (jeg har sikkert ikke hørt ordentligt efter i timen)

select
datediff(dd,create_date,convert(datetime,'1970/1/1',111)) from tickets_sc
Avatar billede trer Nybegynder
30. december 2003 - 13:29 #8
hvis jeg husker ret, så er epoch blot antallet af sekunder siden 1/1/1970 ?

Hvis så
sql_date = dateadd(ss,epoch,convert(datetime,'1970/1/1',111))

epoch = datediff(ss,sql_date,convert(datetime,'1970/1/1',111))
Avatar billede mikse Nybegynder
30. december 2003 - 13:51 #9
Ok nu sker der noget jeg kan nu konvertere epoch -> SQL
jeg mangler nu bare at få cast puttet ind det rigtige sted i min select statement, kan du hjælpe der?

select
datediff(dd,create_date,convert(datetime,'1970/1/1',111)) from tickets_sc
Avatar billede trer Nybegynder
30. december 2003 - 13:53 #10
hvad datatype er din create_date ? Er det ikke datetime?
Avatar billede trer Nybegynder
30. december 2003 - 13:53 #11
eller
Avatar billede trer Nybegynder
30. december 2003 - 13:55 #12
ups.. 11 måneder gammel søn ved tasterne :-)

Du burde ikke have behov for et bruge en cast hvis din datatype er datetime - casten var hvis du skulle lave den simple minus-operation jeg startede med at foreslå.

Ellers er formatet for en cast -> cast(column as datatype)
Avatar billede mikse Nybegynder
30. december 2003 - 13:58 #13
ahmmmm, jeg selected et forkert felt, efter jeg valgte det rigtige virker det.....næsten tallet er negativt?
Avatar billede mikse Nybegynder
30. december 2003 - 14:05 #14
Ja ja, nogle gange spørger man før man har checket det op.

** MSSQL DateTime -> Unix Epoch **
select datediff(ss,convert(datetime,'1970/1/1',111),SM01021) from SM010100

** Unix Epoch -> MSSQL DateTime **
select dateadd(ss,create_date,convert(datetime,'1970/1/1',111)) from tickets_sc

Og det virker - Mange tak for hjælpen og godt nytår

Mvh
Michael
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