Суммирование данных времени .... Помогите!!
lerner
Дата: 05.12.2002 17:09:44
Есть поле Col003 тип данных varchar данные вида ч:мм:cc (длительность часы минуты секунды) как суммировать эти данные по всему столбцу чтобы получилась общая длительность времени. В экселе все корректно складывается (там есть тип данных "время"). Как это сделать в базе MS SQL 2000? (ну новичек я в SQL)
Left Margin
Дата: 05.12.2002 17:23:30
тип данных DATETIME или SMALLDATETIME
learner
Дата: 05.12.2002 17:34:19
Переделываю, EM ругается
- Warning: Data may be lost converting column 'Col003' from 'varchar(255)'.
нажимаю YES, в результате получается по всему полю 01.01.1900
Israel Bender
Дата: 05.12.2002 17:35:03
перевиди все в секунды да послагай,а сумму потом перевиди в года и столетия,не думай о мгновеньях свысока.
OlegAxenow
Дата: 05.12.2002 17:39:23
Может есть более красивые пути решения данной проблемы, но навскидку ничего не придумал...
Если строго следовать формулировке задачи и не пользоваться вычислимыми полями и представлениями, то можно написать следующий запрос (для простоты понимания я разнес его на несколько подзапросов):
select sec/3600 as hh, sec%3600/60 as mi, sec%60 as ss from
(
select datepart(hh,dt)*3600+datepart(mi,dt)*60+datepart(ss,dt) as sec
from (select cast(Col003 as datetime) as dt from source) sq1
) sq2
|
|
Если cast не будет работать, - помотреть на формат записи и использовать convert/set dateformat.
С уважением, Олег Аксенов.
MiCe
Дата: 05.12.2002 18:32:17
в mssql 0 и 01.01.1900 00:00:00.000 одно и тоже....
если у вас показывает 01.01.1900 - это еще не значит что не правильно....
посмотрите время.... может оно у вас не отображается?
learner
Дата: 06.12.2002 10:29:12
Получается что при конвертировании данных из текстового файла в базу MS SQL, сиквел не понимает что это поле формата "время" (даже если я ему на это укажу) и присваивет ему тип varchar и далее начинаются проблемы, переделать тип данных в datetime я не могу, данные пропадают (вижу только 01.01.1900 ), почему все это происходит? Неужели поле должно содержать обязательно дату и время? Зачем для выполнение простой операции суммирования данных формата времени нужно все в секунды переделывать и далее городить огород (я все Эксель вспоминаю, там нет такой проблемы). Существуют ли другие способы более простые и понятные? Если можно по-конкретнее, если кто знает. Заранее спасибо всем.
Fil
Дата: 06.12.2002 12:18:05
declare @s varchar(8) ,@s1 varchar(8)
set @s='01:02:56'
set @s1='02:38:45'
select convert(varchar(8),(convert(datetime ,@s,114)+ convert(datetime ,@s1,114)),114) |
|
funikovyuri
Дата: 06.12.2002 13:32:46
declare @table1 table( time_str varchar(10) )
insert @table1
select '12:40:50'
select cast( ('1.1.1900 ' + time_str) as datetime ) from @table1
Arch-saint
Дата: 06.12.2002 14:26:04
select cast(s/3600 as varchar(50))+':'+cast((s%3600)/60 as varchar(50))+':'+cast(s%60 as varchar(50))
from
(select
sum(cast(SUBSTRING(col003,1,CHARINDEX(':', col003)-1) as integer)*3600+
cast(SUBSTRING(col003,CHARINDEX(':', col003)+1,CHARINDEX(':', col003, CHARINDEX(':', col003)+1)-1-CHARINDEX(':', col003)) as integer)*60+
cast(SUBSTRING(col003,CHARINDEX(':', col003, CHARINDEX(':', col003)+1)+1, LEN(col003)-CHARINDEX(':', col003, CHARINDEX(':', col003)+1)) as integer)) as s
from test_tbl) as tbl1