Конвертировать военное время в строковое представление - PullRequest
1 голос
/ 09 июня 2010

У меня есть столбец, объявленный как int (называемый HourMil), который хранит время в военном формате .мне нужно преобразовать эти значения в форматированную строку (ЧЧ: ММ)

пример

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

На самом деле я использую этот код (и работает нормально) для преобразования столбца HourMil в представление строки.

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

но я думаю, что этот код можно улучшить.

Ответы [ 3 ]

1 голос
/ 09 июня 2010

Создав дату, затем отформатировав ее:

SELECT SUBSTRING(CONVERT(nvarchar, DATEADD
   (hh, HourMil / 100, DATEADD(mi, HourMil % 100, '1900-01-01')), 8), 0, 6)
0 голосов
/ 09 июня 2010

Это еще один и самый короткий метод

select stuff(right('0'+ltrim(hourmail),4),3,0,':') from
(
select 710 as hourmail union all
select 1305
) as t
0 голосов
/ 09 июня 2010

Уравнения:

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

Примеры работы:

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

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

Примечание: Все / * операторы ДОЛЖНЫ работать с десятичными числамитолько.(целые числа)

Тогда ваш SQL будет:

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

С окончательными уравнениями, похоже, будет:

CONCAT(CAST((HourMil / 100) AS VARCHAR(8)), ':', CAST((HourMil - ( HourMil / 100 ) * 100) AS VARCHAR(8)));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...