2017-10-09 1 views
0

La requête est effectuée dans un script SQL.
Mon problème:
Je dois transmettre les données dans un modèle comme json.
C'est pourquoi j'ai besoin de le convertir en un timespan dans le script sql.Convertir int en timespan dans le script SQL (SQL Server)

--TEMP 
DECLARE @startDate DATETIME 
SET @startDate = '01-09-2016' 

DECLARE @endDate DATETIME 
SET @endDate = '03-10-2017' 
--END 


SELECT 
Firstname, 
Lastname, 
COUNT(Token.Id) as Tokens, 
**CONVERT(time, SUM(DATEDIFF(ss, Token.ArrivalTime, Token.CompletionTime)), 57) as [Time]** 
FROM Employee 
INNER JOIN Token ON Token.Employee_Id = Employee.Id 
WHERE AssignmentTime >= @startDate and AssignmentTime <= @endDate 
and Status = 2 
GROUP BY Firstname, Lastname 
ORDER BY Tokens DESC 
FOR JSON PATH 

L'erreur est:

The explicit conversion from data type int to time is not allowed 

Qu'est-ce que la sortie devrait ressembler à: "Hans", "Muster", 5, 400

Merci à l'avance!

+0

données d'échantillon de bien vouloir partager et de sortie souhaitée en texte formaté (pas d'images) – zarruq

+0

C'est SQL non standard. Quel produit SGBD utilisez-vous? (ressemble à T-SQL/SQL Server) –

+0

Son SQL Server. Désolé pour ça, je ne suis pas habitué à sql. – eDonkey

Répondre

1

À la fin ce n'était pas si difficile. Je n'ai pas analysé l'int à timespan dans la requête sql. J'ai eu une erreur dans chaque variation, peu importe ce que j'ai essayé. Thats my solution:

DATEDIFF(ss, Token.ArrivalTime, Token.CompletionTime) as TimeInSeconds 

Dans le ViewModel qui se passe dans le contrôleur, je l'analyse syntaxique:

public int TimeInSeconds { get; set; } 
    public TimeSpan Time 
    { 
     get { return TimeSpan.FromSeconds(TimeInSeconds); } 
    } 
1

Le problème que vous avez est avec la fonction SUM. parce que vous essayez de faire la sommation à un moment donné. Vous devez utiliser la fonction DATEADD. Pensez comme ceci si essayer sommation entre 13h50 et 21h45 cela ne fonctionnera pas