2010-06-08 6 views
1

J'ai une colonne déclarée int (appelée HourMil) qui stocke l'heure dans military format. i besoin de convertir ces valeurs à une chaîne formated (HH: MM)Convertir l'heure militaire en représentation sous forme de chaîne

exemple

HourMil = 710 -> must be 07:10 
HourMil = 1305 -> must be 13:05 

En fait, je suis en utilisant ce code (et fonctionne ok) pour convertir le HourMil de colonne à la représentation de chaîne.

SELECT SUBSTRING(LEFT('0',4-LEN(CAST(HourMil AS VARCHAR)))+CAST(HourMil AS VARCHAR),1,2)+':'+SUBSTRING(LEFT('0',4-LEN(CAST(HourMil AS VARCHAR)))+CAST(HourMil AS VARCHAR),3,2) FROM MYTABLE 

mais je pense que ce code peut être amélioré.

+0

Quelle version de SQL Server? –

+0

En fait, ce format "militaire" (format 24 heures) est ce que la majorité ** VAST ** du monde utilise - tout le monde sauf les États-Unis, à peu près .... pourquoi ne pas l'appeler "International" ou "Standard" " temps ?? –

Répondre

1

En créant une date, le formatage puis:

SELECT SUBSTRING(CONVERT(nvarchar, DATEADD 
    (hh, HourMil/100, DATEADD(mi, HourMil % 100, '1900-01-01')), 8), 0, 6) 
+0

+1 Très belle solution, merci beaucoup. – RRUZ

0

équations:

H = HourMil/100; 
M = HourMil - (HourMil/100) * 100; 

Exemples de travail:

H = 710/100 = 7 
M = 710 - (710/100) * 100 = 10 

H = 1305/100 = 13 
M = 1305 - (1305/100) * 100 = 5 

Note: Tous les /* opérateurs MUST travaillant sous des nombres décimaux seulement. (entiers)

Ensuite, vous SQL serez:

CONCAT(CAST(H AS VARCHAR(8)), ':', CAST(M AS VARCHAR(8))); 

avec des équations finales semble être:

CONCAT(CAST((HourMil/100) AS VARCHAR(8)), ':', CAST((HourMil - (HourMil/100) * 100) AS VARCHAR(8))); 
0

Ceci est une autre méthode et aussi la plus courte

select stuff(right('0'+ltrim(hourmail),4),3,0,':') from 
(
select 710 as hourmail union all 
select 1305 
) as t 
Questions connexes