Как преобразовать varchar во время чч: мм - PullRequest
0 голосов
/ 14 февраля 2019

У меня есть varchars, представляющие военное время:

a 2130 -- 21 hours
b 103 -- 1 hour
c 10  -- 10 minutes
d 1  -- 1 minutes

два оставшихся символа всегда представляют минуты.В примере c и c выше 10 и 1 всегда минуты.Пример B 103 состоит из трех символов.В данном случае 1 - это час. 03 - это минута.

Как преобразовать это время в формат чч: мм?

Ответы [ 3 ]

0 голосов
/ 14 февраля 2019

Вы можете попробовать следующее, используя длину значения столбца и оператор case.

Declare @YourTable table (SomeCol int)
Insert into @YourTable values
 (2130)
,(103)
,(10)
,(1)

Select 
    case LEN(SomeCol)
        when 4 then SUBSTRING('2130', 1, 2) + ':' + SUBSTRING('2130', 3, 2)
        when 3 then '0' + SUBSTRING('103', 1, 1) + ':' + SUBSTRING('103', 2, 2)
        when 2 then '00:' + CONVERT(Varchar(5), SomeCol)
        else '00:0' + CONVERT(Varchar(5), SomeCol)
    end as TimeValue
from @YourTable
0 голосов
/ 14 февраля 2019

Добрый день, Джейкоб,

Пожалуйста, проверьте, подходит ли вам это решение:

Declare @YourTable table (SomeCol int)
Insert into @YourTable values
 (2130)
,(103)
,(10)
,(1)
--Select SomeCol,TimeValue = format(SomeCol,'00:00'), SQL_VARIANT_PROPERTY (format(SomeCol,'00:00'),'BaseType')
--From  @YourTable
SELECT CONVERT(TIME(0),TIMEFROMPARTS(ROUND(SomeCol/100,0), SomeCol%100,0,0,0))
FROM @YourTable

Опс, я заметил новую информацию в комментариях.Похоже, вы используете SQL Server 2008R2 и TIMEFROMPARTS не будет работать на SQL Server2008r2 (только начиная с 2012 года) ... Я отредактирую ответ через секунду

Примечание! Я настоятельно рекомендуюПодумайте о дизайне вашей базы данных. Пожалуйста, прочитайте комментарий, который я написал выше для получения дополнительной информации

Обновление:

-- For old servers please check if one of these this fit you
SELECT --RIGHT('00' + CONVERT(VARCHAR(2),ROUND(SomeCol/100,0)),2),RIGHT('00' + CONVERT(VARCHAR(2),SomeCol%100),2),
    CONVERT(TIME(0),RIGHT('00' + CONVERT(VARCHAR(2),ROUND(SomeCol/100,0)),2) + ':' + RIGHT('00' + CONVERT(VARCHAR(2),SomeCol%100),2))
FROM @YourTable
0 голосов
/ 14 февраля 2019

Для использования Format () используется одна опция ()

Пример

Declare @YourTable table (SomeCol int)
Insert into @YourTable values
 (2130)
,(103)
,(10)
,(1)

Select SomeCol
      ,TimeValue = format(SomeCol,'00:00')
 From  @YourTable

Возвращает

SomeCol TimeValue
2130    21:30
103     01:03
10      00:10
1       00:01

РЕДАКТИРОВАТЬ - Запрошенная РЕДАКТИРОВАТЬ на 2008

Declare @YourTable table (SomeCol int)
Insert into @YourTable values
 (2130)
,(103)
,(10)
,(1)

Select SomeCol
      ,TimeValue = stuff(right('0000' + left(SomeCol, 4),4), 3, 0, ':')
 From  @YourTable
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...