Hvordan konvertere en DB2 dato-tid streng i et Excel Dato

stemmer
2

Jeg skal jevnlig få et utdrag fra en DB / 2 database med datoer og timestaps formatert slik:

2002-01-15-00.00.00.000000
2008-01-05-12.36.05.190000
9999-12-31-24.00.00.000000

Finnes det en enklere måte å konvertere dette til Excel datoformatet enn rotne med unders?

DB2date = DateValue(Left(a, 4) + / + Mid(a, 6, 2) + / + Mid(a, 9, 2))

takk for hjelpen!

Publisert på 03/10/2008 klokken 08:16
kilden bruker
På andre språk...                            


4 svar

stemmer
1

Jeg er sikker på at du kan lage noe med Regex er hvis du virkelig brydde seg å. Det ville ikke være noen 'bedre' selv, sannsynligvis verre.

Hvis du vil tilgi litt av C # (jeg havn't rørt VB i år, så jeg vet ikke funksjonskall lenger) du kan også gjøre:

DB2string = "2002-01-15-00.00.00.000000";
DB2date = DateValue(DB2string.SubString(0, 10).Replace('-', '/'));

Men igjen, du er egentlig ikke få noe. Kan du gi et eksempel på hvor din nåværende koden ville bryte?

Svarte 03/10/2008 kl. 08:19
kilden bruker

stemmer
2

Det er ikke klart om du snakker om formelfunksjoner eller VBA-funksjoner.

Formel funksjoner

Ikke bruk DATEVALUE-funksjonen, som forventer en streng; Bruk datofunksjonen, som forventer numerisk År, Måned, Dag:

=DATE(INT(LEFT(A1,4)),INT(MID(A1,6,2)),INT(MID(A1,9,2)))

forutsatt at datoen-as-strengen er i A1.

VBA-funksjoner

Tilsvarende beregning som ovenfor, bare bruke Dateserial funksjonen i stedet:

dt= DateSerial(Int(Left$(dt$, 4), Int(Mid$(dt$, 6, 2)), Int(Mid$(dt$, 9, 2)))
Svarte 03/10/2008 kl. 08:32
kilden bruker

stemmer
1

i VBA, dateValue()kan konvertere den første delen av strengen til en dato:

? dateValue("2002-01-15")

    15/01/2002

Så den riktige måten å få det for deg vil være

? dateValue(left("2002-01-15-00.00.00.000000",10))

Dette vil alltid gi deg det riktige svaret så lenge DB2 alltid gi deg en "ÅÅÅÅ-MM-DD" dato. Formatet på resultatet (dd / mm / åå, mm-ddd-åååå, etc) vil være avhengig av de lokale innstillingene for datamaskinen / spesifikke innstillingene i cellen.

Hvis du ønsker å trekke ut "time" en del av strengen, det er denne timeValue()funksjonen som til slutt vil gjøre jobben.

Svarte 03/10/2008 kl. 08:41
kilden bruker

stemmer
1

Hvis du ønsker å inkludere tidsinformasjonen du har mer å gjøre; DATEVALUE forkaster den.
TIMEVALUE kan evaluere tiden delen ned til sekunder, slik at du kan legge dem:

= DateValue(Mid(a, 1, 10)) + TimeValue(Mid(a, 12, 8))

Men prøven data presenterer et annet problem: den har både tidsverdier "00.00.00" og "24.00.00".
Den andre gags den TIMEVALUE-funksjonen, slik at du må kode for den spesielle saken.

Svarte 03/10/2008 kl. 13:44
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more