2011-01-10 16 views
0

Ich werde eine ganze Zahl von datediff berechnet haben()INT hh: mm: ss tt in SQL Server

sagen wir mal, .. es ist ..

declare @earliestTime int; 
set @earliestTime=50000000; 

ich hh konvertieren möchten: mm: ss tt

ich habe diesen Code zu konvertieren, dass int HH: mm: ss

CONVERT(varchar(6), (@earliestTime)/60)+ ':' + RIGHT('0' + CONVERT(varchar(2), ((@earliestTime) % 60)), 2)+ ':' + RIGHT('0' + CONVERT(varchar(2), ((@earliestTime) %60)*0), 2) 

Wie ich es hh ändern können: mm: ss tt (AM oder PM)

es so geändert ..

CONVERT(varchar(6), 
case 
when 
((@earliestTime)/60)<=12 
then 
((@earliestTime)/60) 
else 
(((@earliestTime)/60)-12) 
end) 

--CONVERT(varchar(6), case when((@earliestTime)/60)<=12 then (@earliestTime)/60 else ((@earliestTime)/60)-12) 
+ 
':' 
+ 
RIGHT('0' + CONVERT(varchar(2), ((@earliestTime) % 60)), 2) 
+ 
':' 
+ 
RIGHT('0' + CONVERT(varchar(2), ((@earliestTime) %60)*0), 2 
+ 
' ' 
+ 
convert(varchar(2),(case when ((@earliestTime)/60)<12 then 'am' else 'pm' end))) 

Aber es gibt mir diesen Fehler ..

Fehler bei der Konvertierung, wenn die varchar Wert 'pm' in dem Datentyp int konvertieren.

Ich konvertiere bereits 'pm' oder 'am' nach varchar (2). Warum gibt mir das System immer noch diesen Fehler?

Wie man es richtig macht oder gibt es einen besseren Weg?

+2

Was bedeutet die ganze Zahl? Sekunden zwischen zwei Daten, Stunden, was? –

+0

ja .. Sekunden zwischen 2 Mal – william

Antwort

2

Sie erklären nicht, was Ihre ganze Zahl darstellt, daher ist es schwierig, eine Antwort zu geben.

Es ist am besten, einen richtigen Datentyp für Zeiten zu verwenden. Ich würde DATETIME verwenden - es ermöglicht Ihnen, Berechnungen durchzuführen, zu sortieren und zu formatieren, wie erforderlich. Die Speicherung von Zeit wird später Kopfschmerzen verursachen.

Speichern einer Zeit, indem die Zeit auf die SQL Epoche Addieren (1900-01-01 00.00.00), wie so

SELECT DATEADD(SECOND, 50000, CONVERT(DATETIME, 0.0)) 
SELECT DATEADD(MINUTE, 50000, CONVERT(DATETIME, 0.0)) 

dann die DATETIME entsprechend Objekt formatieren.

  • HH Um: mm: ss, Verwendung Format 108
  • die AM/PM-Flag zu erhalten, 100 verwenden und die beiden rechten Zeichen nehmen.

Versuchen Sie die folgenden:

DECLARE @date DATETIME 
SET @date = DATEADD(SECOND, 50000, CONVERT(DATETIME, 0.0)) 
SELECT CONVERT(VARCHAR, DATEPART(HOUR, @date)%12) 
    + ':' + RIGHT(CONVERT(VARCHAR, @date, 108),5) 
    + RIGHT(CONVERT(VARCHAR, @date, 100), 2) 

ich auch darauf hinweisen, dass Sie in einer Datenbank arbeiten, kein Präsentationsschicht. Sie sollten sich keine Gedanken über die Formatierung von Datum und Uhrzeit in einer Datenbank machen müssen. Es geht um Datenspeicherung und -abruf. Vermutlich kehren Sie diese Zeit zu einer Anwendung oder Webseite zurück, um sie auf einen Bildschirm, in einen Bericht oder was auch immer zu bringen - am besten ist es, die Daten als vollständige DATETIME zu speichern und von der obersten Ebene formatieren zu lassen. Durch die Umwandlung in VARCHAR entfernen Sie nur Informationen und beschränken sich auf Sie; kein Vorteil, viele Kosten.

+0

Sie letzten 3 Zeilen geben Sie mir dies .. 13:53:20 Uhr ist es nicht zu b 1:53:20 pm? – william

+0

Sie haben Recht - Sie müssen mit den Formatzeichenfolgen spielen, um die beste Kombination zu erhalten.Dies funktioniert, auch wenn Sie eine einfachere Kombination finden können: CONVERT (VARCHAR, DATEPART (HOUR, @date)% 12) + ':' + RECHTS (CONVERT (VARCHAR, @date, 108), 5) + RECHTS (CONVERT (VARCHAR, @date, 100), 2) ' –

+0

Ich habe meine Antwort aktualisiert, um 12 Stunden statt 24 Stunden anzuzeigen. –

Verwandte Themen