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