|
|
Как вычленить время записи документа из даты в _1SJOURN |
☑ |
|
0
DK_L
17.01.08
✎
16:39
|
После даты аброкадабра какая-то там - как преобразовать тот формат в удобочитаемый.
Допустим
200701017Т364G вот что мы получаем из SQL
|
|
|
1
akaBrr
17.01.08
✎
16:41
|
Left
|
|
|
2
akaBrr
17.01.08
✎
16:42
|
Левые 8 символов это дата
|
|
|
3
akaBrr
17.01.08
✎
16:43
|
(0) Извини тебе же время надо, проглядел я
|
|
|
4
sapphire
17.01.08
✎
16:44
|
остально - время в 36-ричной ситеме (1/10000 с)
|
|
|
5
dk
17.01.08
✎
16:45
|
|
|
|
6
sapphire
17.01.08
✎
16:45
|
CREATE FUNCTION CDATE(@DATE_TIME_IDDOC char(23)) RETURNS datetime AS BEGIN DECLARE @HH INT DECLARE @MM INT DECLARE @SS INT DECLARE @result datetime DECLARE @str_result char(8) DECLARE @ЗНАЧЕНИЕ_В_ДЕСЯТИТЫСЯЧНЫХ_СЕКУНДЫ BIGINT DECLARE @TIME36 CHAR(23) SET @TIME36=LEFT(@DATE_TIME_IDDOC,CHARINDEX(' ',@DATE_TIME_IDDOC)) SET @TIME36=RIGHT(RTRIM(@TIME36),LEN(RTRIM(@TIME36))-8) SET @ЗНАЧЕНИЕ_В_ДЕСЯТИТЫСЯЧНЫХ_СЕКУНДЫ=dbo.Convert36to10f(@TIME36) SET @HH=@ЗНАЧЕНИЕ_В_ДЕСЯТИТЫСЯЧНЫХ_СЕКУНДЫ/10000/60/60 SET @MM=@ЗНАЧЕНИЕ_В_ДЕСЯТИТЫСЯЧНЫХ_СЕКУНДЫ/10000/60-60*@HH SET @SS=@ЗНАЧЕНИЕ_В_ДЕСЯТИТЫСЯЧНЫХ_СЕКУНДЫ/10000-3600*@HH-60*@MM set @str_result=''+CAST(@HH as CHAR(2))+':'+CAST(@MM as CHAR(2))+':'+CAST(@SS as CHAR(2)) set @result=CAST(@str_result as datetime) return @result END
|
|
|
7
sapphire
17.01.08
✎
16:46
|
CREATE FUNCTION Convert36to10f (@Res36 char(9) ) RETURNS bigint AS BEGIN --SET NOCOUNT ON DECLARE @j INT declare @Deci bigint DECLARE @Arr36 CHAR(36) SELECT @Arr36 = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ' SELECT @Deci = 0 SELECT @j = 1 while @j <= LEN(LTRIM(RTRIM(@Res36))) begin if @j <> 1 SELECT @Deci = @Deci*36 SELECT @Deci = @Deci + CHARINDEX(SUBSTRING(LTRIM(RTRIM(@Res36)), @j,1),@Arr36) -1 SELECT @j = @j+1 end return @Deci END
|
|
|
8
Cthulhu
17.01.08
✎
16:46
|
Хранение времени:
Время может храниться в двух форматах: Числовое представление, Строковое представление.
В случае числового хранения времени отсчитывается от начала суток в десятиcячных долях секунды. Т.е. фактически будет получено число: (Часы*3600+Минуты*60+секунды)*10000. Т.е. Для времени 19:05:36 – 687360000 (1С умеет учитывать время до 1000 долей секунды, как в случае с документами).
В случае числовго хранения времени время с числового значения (Часы*3600+Минуты*60+секунды)*10000 переводиться в 36-ричный формат. Так для времени 19:05:36 - BD8IDC.
|
|
|
9
DK_L
17.01.08
✎
16:54
|
всем спасибо...
|
|
|
10
mikecool
17.01.08
✎
17:21
|
только при присвоении времени менее секунды от начала дня(типа 1 десятитысячную) 1С не видит таких записей.... мои наблюдения
|
|