03. oktober 2015 - 09:58 Der er 5 kommentarer og
1 løsning

Tal til tid

Har to kolonner med klokkeslet SClock og EClock

De indeholder hele tal så en arbejdsdag fra 07:25 til 14:50 står som
SClock = 725
EClock = 1450


Jeg har brug for 4 kolonner:
StartTime As Time (SClock)
EndTime As Time (EClock)
DiffTime As Time (EndTime-StartTime)
DiffNo As Float DiffTime * 24

Det er sikkert for nemt... men hvordan skal min select statement se ud for at dette lykkedes?
Avatar billede arne_v Ekspert
04. oktober 2015 - 00:46 #1
Koden ligner mere VB and TSQL.

Gammeldags VB eller VB.NET?
04. oktober 2015 - 17:42 #2
Jeg sidder og leger fra Excel med en SQL som backend... så good old VB, men sql bliver jo afviklet server-side, så jeg blot får et resultat/en tabel retur

Lige nu er jeg kommet hertil...

[dim]SELECT
    CASE WHEN START_CLOCK IS NULL OR START_CLOCK = 0 THEN '00:00' ELSE CONVERT(time ,LEFT(CONVERT(varchar,start_clock),LEN(START_CLOCK)-2) + ':' + RIGHT(CONVERT(varchar, START_CLOCK),2)) END AS StartTime,
    CASE WHEN END_CLOCK IS NULL OR END_CLOCK = 0 THEN '00:00' ELSE CONVERT(time ,LEFT(CONVERT(varchar,END_CLOCK),LEN(END_CLOCK)-2) + ':' + RIGHT(CONVERT(varchar, END_CLOCK),2)) END AS EndTime,
    EndTime - StartTime As TimeSpend,
    TimeSpend * 24 As TimeNumber
FROM SalaryRegistrations[/div]

Tror tiden er håndteret korrekt, men får 'Invalid column name' på EndTime, StartTime og TimeSpend, når jeg forsøger at bruge dem igen...
04. oktober 2015 - 18:51 #3
Jeg er ikke sikker på, at SQL eksperterne vil gøre det således... men jeg mener at have fået tre af mine kolonner beregnet.

SELECT
    CASE WHEN START_CLOCK IS NULL OR START_CLOCK = 0 THEN '00:00' ELSE CONVERT(time, LEFT(CONVERT(varchar, START_CLOCK), LEN(START_CLOCK)-2) + ':' + RIGHT(CONVERT(varchar, START_CLOCK),2)) END AS StartTime
    ,CASE WHEN END_CLOCK IS NULL OR END_CLOCK = 0 THEN '00:00' ELSE CONVERT(time, LEFT(CONVERT(varchar, END_CLOCK), LEN(END_CLOCK)-2) + ':' + RIGHT(CONVERT(varchar, END_CLOCK),2)) END AS EndTime
    ,CONVERT(float, DATEDIFF(MINUTE, CASE WHEN START_CLOCK IS NULL OR START_CLOCK = 0 THEN '00:00' ELSE CONVERT(time, LEFT(CONVERT(varchar, START_CLOCK), LEN(START_CLOCK)-2) + ':' + RIGHT(CONVERT(varchar, START_CLOCK),2)) END,
            CASE WHEN END_CLOCK IS NULL OR END_CLOCK = 0 THEN '00:00' ELSE CONVERT(time, LEFT(CONVERT(varchar, END_CLOCK), LEN(END_CLOCK)-2) + ':' + RIGHT(CONVERT(varchar, END_CLOCK),2)) END)) / 60 As TimeNumber
FROM SalaryRegistrations


Kan det gøres smartere ?????
04. oktober 2015 - 22:32 #4
Gør noget helt andet - lukket
Avatar billede kjulius Novice
01. januar 2016 - 22:32 #5
Ved du har lukket det osv., men...  ;-)


WITH ConvertedSalaryRegistrations AS (
    SELECT
    PERSONID,
    CAST(DATEADD(MINUTE, ISNULL(FLOOR(START_CLOCK / 100) * 60 + START_CLOCK % 100,0),'00:00:00') AS DATETIME) AS START_TIME,
    CAST(DATEADD(MINUTE, ISNULL(FLOOR(END_CLOCK / 100) * 60 + END_CLOCK % 100,0),'00:00:00') AS DATETIME) AS END_TIME
    FROM #SaleryRegistrations)

SELECT PERSONID,
        START_TIME,
        END_TIME,
        DATEADD(MINUTE,DATEDIFF(MINUTE,START_TIME,END_TIME),'00:00:00') AS DIFF_TIME
FROM ConvertedSalaryRegistrations;
Avatar billede kjulius Novice
03. januar 2016 - 15:35 #6
Forøvrigt har du ikke accepteret dit lukket-svar, så det er reelt ikke lukket endnu. :-)
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

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