sql >> Database teknologi >  >> RDS >> Sqlserver

Returner mere end 24 timer i tt:mm:ss-format i SQL server 2008

BTW der er så mange tekniske fejl i proc samt datatype, som du bruger. Det virkelige problem er her.

  1. I din proc kan du sætte where date condition i selve første CTE.
  2. Hvis det er muligt, kan du gemme ekstratimer i andenpladsen i tabellen. Det betyder, at Extratimer er int eller bigint.som -1000 eller 1000.varchar vil aldrig løse dit problem. Det vil spare dig for mange konverteringer og derfor hurtigt.
  3. At bruge så mange kolonner i gruppen er i sig selv forkert tilgang. Især at bruge varchar-kolonnen i gruppe efter. Du bør bruge nøglekolonnen i gruppen og derefter slutte sig til tabellen igen for at få andre kolonner i resultatsættet.

med dine eksempeldata får jeg -29:-51:-30.0 i stedet for -31:50:46 .gør det på denne måde,

DECLARE @t TABLE (ExtraHrs VARCHAR(20))

INSERT INTO @t
VALUES ('00:59:38')
    ,('-03:59:37')
    ,('-08:59:39')
    ,('-08:52:36')
    ,('-08:59:16');

WITH cte
AS (
    SELECT ExtraHrs
        ,CASE 
            WHEN left(ExtraHrs, 1) = '-'
                THEN - 1
            ELSE 1
            END AS multiply
        ,right(ExtraHrs, 8) AS timestring
        ,
        --get hours in seconds:
        DATEPART(HOUR, right(ExtraHrs, 8)) * 3600 AS h_in_s
        ,
        --get minutes in seconds:
        DATEPART(MINUTE, right(ExtraHrs, 8)) * 60 AS m_in_s
        ,
        --get seconds:
        DATEPART(SECOND, right(ExtraHrs, 8)) AS s
    FROM @t
    )
    ,CTE3
AS (
    SELECT *
        ,c.h_in_s + c.m_in_s + c.s AddExtra
    FROM cte c
    )
    ,cte4
AS (
    SELECT sum(AddExtra * multiply) mn
    FROM cte3
    )
    ,cte5
AS (
    SELECT mn / 3600 hh
        ,(mn % 3600) / 60 mi
        ,(mn % 3600.0) % 60 ss
    FROM cte4
    )
SELECT CASE 
        WHEN hh < 0
            THEN '-'
        ELSE ''
        END
    ,cast(hh AS VARCHAR) + ':' + cast(mi AS VARCHAR) + ':' + cast(ss AS VARCHAR)
FROM cte5


  1. SQLSTATE[42S22]:Kolonne blev ikke fundet:1054 Ukendt kolonne 'id' i 'where clause' (SQL:vælg * fra 'songs' hvor 'id' =5 limit 1)

  2. Mysql Deltag i to tabeller på nøgler

  3. MySQL:tjek hvilken version:32 bit eller 64 bit?

  4. QT5:Kunne ikke indlæse psql-driver i Windows