Avatar billede dm013 Nybegynder
22. maj 2003 - 12:37 Der er 13 kommentarer og
1 løsning

Konvertering af integer til klokkeslæt

jeg har en linked access database hvorfra jeg gerne vil hente nogle oplysninger over i min MS SQL database, desværre præsenteres klokkeslæt som int af varierende længde( 1-4 tegn) kan jeg konverterer disse integers til hh:mm ?
Avatar billede janus_007 Nybegynder
22. maj 2003 - 15:10 #1
Sføli kan man det sålænge der er en klar sammenhæng imellem tallet og klokken.

Post et par tal og fortæl hvad klokken er :O)
Avatar billede dm013 Nybegynder
22. maj 2003 - 15:28 #2
Det prøver jeg så :O)

Jeg har  en tabel som indeholder feltet Start_ KL (access, tal)

som indeholder værdier, fra 0 til 2359

var det oplysninger nok ???
Avatar billede janus_007 Nybegynder
22. maj 2003 - 15:57 #3
select convert(varchar(5), convert(datetime, '2359-01-01 ' + substring(left('2359' + '5', 4), 1, 2) + ':' + substring(left('2359' + '5', 4), 3, 4)),108)
Avatar billede dm013 Nybegynder
22. maj 2003 - 16:36 #4
Det du der har skrevet er jo statisk, hvis den nu skal konverterer på baggrund af feltnavnet, hvorledes skal syntax'en så se ud?
Avatar billede janus_007 Nybegynder
22. maj 2003 - 16:42 #5
det kommer jo an på hvad dit feltnavn hedder ;O)


select convert(varchar(5), convert(datetime, '2359-01-01 ' + substring(left(cast(datofelt as varchar) + '5', 4), 1, 2) + ':' + substring(left(cast(datofelt AS varchar) + '5', 4), 3, 4)),108)


men det skulle kunne gøre det
Avatar billede janus_007 Nybegynder
22. maj 2003 - 16:44 #6
ej hovsa... sorry

select convert(varchar(5), convert(datetime, '2359-01-01 ' + substring(left(cast(datofelt as varchar) + '5', 4), 1, 2) + ':' + substring(left('000' + cast(datofelt as varchar), 4), 3, 4)),108)
Avatar billede dm013 Nybegynder
22. maj 2003 - 17:21 #7
Jeg får en fejl, "The conversion of a char to datetime type resulted in an out of range datetime value"

SELECT    Hensæt_KL, CONVERT(varchar(5), CONVERT(datetime, '2359-01-01 ' + SUBSTRING(LEFT(CAST(Hensæt_KL AS varchar) + '5', 4), 1, 2)
                      + ':' + SUBSTRING(LEFT('000' + CAST(Hensæt_KL AS varchar), 4), 3, 4)), 108) AS test
FROM        DATADB...RAP_1 procesdata
Avatar billede janus_007 Nybegynder
22. maj 2003 - 17:53 #8
select Hensæt_KL, convert(varchar(5), convert(datetime, '2359-01-01 ' + substring(left('000' + cast(Hensæt_KL as varchar), 4), 1, 2) + ':' + substring(left('000' + cast(Hensæt_KL as varchar), 4), 3, 4)),108) FROM        DATADB...RAP_1 procesdata

Måske det virker bedre... Ellers må jeg kigge på det imorgen, det er ihvertfald sådan det skal gøres :O)
Avatar billede dm013 Nybegynder
22. maj 2003 - 18:00 #9
Det sidste forslag virker delvist :O)

2357 -->00:02
111  -->00:01
34  -->00:03
  3  -->00:03

See a Pattern :-O)?
Avatar billede dm013 Nybegynder
22. maj 2003 - 18:01 #10
men den passer når jeg rammer midnat og indtil 9 minutter over :O)
Avatar billede janus_007 Nybegynder
22. maj 2003 - 22:51 #11
nåja ok..

ja jeg havde jo heller ikke testet den ;O)

udskift LEFT med RIGHT

eks.vis  left('000'  -> right('000'

osv...
Avatar billede dm013 Nybegynder
23. maj 2003 - 13:05 #12
Jeg får igen fejlen, "The conversion of a char to datetime type resulted in an out of range datetime value"
Avatar billede janus_007 Nybegynder
23. maj 2003 - 13:15 #13
Højest sandsynligt fordi ikke alle Hensæt_KL er gyldige tal altså imellem 0 og 2359. Dvs. der er måske en integritetsfejl.
Du kan evt. afsløre den vha.

SELECT COUNT(*), ISNULL(Hensæt_KL, '-1)
FROM DATADB...RAP_1 procesdata
GROUP BY Hensæt_KL
ORDER BY 1 DESC


Du skal huske at kun at vælge de valide data... Gør sådan her:

select Hensæt_KL, convert(varchar(5), convert(datetime, '2359-01-01 ' + substring(RIGHT('000' + cast(Hensæt_KL as varchar), 4), 1, 2) + ':' + substring(RIGHT('000' + cast(Hensæt_KL as varchar), 4), 3, 4)),108) FROM        DATADB...RAP_1 procesdata WHERE Hensæt_KL BETWEEN 0 AND 2359

Jeg har lavet en lille test, således at du kan se den rent faktisk gør hvad den skal:

declare @Hensæt_KL as varchar(50)
set @Hensæt_KL = '0350'
select @Hensæt_KL,
convert(varchar(5), convert(datetime, '2359-01-01 ' +
substring(right('000' + cast(@Hensæt_KL as varchar), 4), 1, 2) + ':' +
substring(right('000' + cast(@Hensæt_KL as varchar), 4), 3, 4)),108)
Avatar billede dm013 Nybegynder
23. maj 2003 - 14:00 #14
mange tak for hjælpen 007 :O)
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