2013-05-21 2 views
0

У меня есть столбец с целыми значениями в секундах, т.е.:SQL время от стоимости

Seconds 
234555 
1123 
44567 

мне нужно сделать выбор из этого столбца, но возвращаемое значение должно быть в форме 1d 13h 23m

Как именно я должен сформулировать SQL-запрос?

+0

Другой намек, вы имеете право делать математику в запросах. Например, вы можете сделать «выберите 1 + 1 как два» –

+0

Результат должен быть одной ячейкой, и это может быть строка, не обязательно дата. –

+0

Я обновил свой ответ, поэтому в результате получается строка, как вы просили. –

ответ

1

не является хорошим решением, но в любом случае

declare @day int 
declare @tmpHour int 
declare @Hour int 
declare @tmpMinute int 
declare @Min int 

select @day = Seconds_Column/ (24*60*60),@tmpHour = Seconds_Column%(24*60*60) 
from yourTable 

select @Hour = @tmpHour/(60*60) 
select @tmpMinute = @tmpHour%(60*60) 
select @Min = @tmpMinute/60 

select cast(@day as varchar) + ' day '+ 
     cast(@Hour as varchar) + ' hour ' + 
     cast(@Min as varchar) + ' min' 
+0

Это то, что я ищу. Благодарю. –

2

Предполагая, что значения взяты из столбца INTERVAL, вы можете использовать функцию CONVERT и присваивать ей код стиля. См http://msdn.microsoft.com/en-us/library/aa237895(v=sql.80).aspx

SELECT CONVERT(varchar, DATEADD(ms, INTERVAL * 1000, 0), 114) 

Код стиля 114 означает hh:mi:ss:mmm в 24-часовом формате, с века на год, если интервал больше, чем столетие. Если вам не нужны цифры века, просто используйте 14 в качестве кода стиля.

+1

Мне понадобится что-то вроде dd: hh: mm и желательно способ отформатировать его с помощью букв между ними, например: '1d 13h 12m' –

+1

Возможно, попробуйте использовать один из других кодов стиля в предоставленной ссылке MSDN. Я думаю, вам нужно будет сделать несколько манипуляций с строкой или взглянуть на функцию DATEPART http://msdn.microsoft.com/en-us/library/aa258265(v=sql.80).aspx. – Intermernet

5
select 
    CAST(seconds/60/60/24 as VARCHAR) + 'd ' + 
    CAST(seconds/60/60%24 as VARCHAR) + 'h '+ 
    CAST((seconds/60)%60 as VARCHAR) + 'm ' + 
    CAST(seconds%60 as VARCHAR) + 's' 
from your_table 

Я обновил свой ответ в соответствии с вашим комментарием

+0

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

+0

Второй расчет, вероятно, должен идти 'секунд/60/60% 24'. Кроме этого, я бы согласился, переменные кажутся совершенно излишними для решения этого. –

+0

Это может быть один. Во всяком случае, я обнаружил небольшую ошибку в моем коде, у меня не было '+'. Спасибо за комментарий! –

Смежные вопросы