Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Вопросы от чайника по T-SQL  [new]
Виталий из Петербурга
Member

Откуда:
Сообщений: 55
доброй ночи.
SQL 2008 R2\64
Есть таблица в которой есть колонка sentdate\bigint, например 1323765292950
Вычисление unixtime нам дает 1323765292, т.е налицо прибавление трех знаков к unixtime

1. Можно ли сразу получать такой формат даты-времени в T-SQL, без преобразования windows time>unixtime

2. После выборки данны мне необходимо привести их в человекочитаемый вид, т.е провести преборазование unixtime*100>yyyy-mm-dd-hh-mm-ss

Как можно это сделать.

Ниже, для справки, мой запрос



DECLARE @begin_unix_date bigint;
DECLARE @end_unix_date bigint;
DECLARE @select_timestamp bigint;

SET @begin_unix_date=dbo.UNIX_TIMESTAMP(GETDATE())
SET @end_unix_date=dbo.UNIX_TIMESTAMP(GETDATE())-64000
SET @select_timestamp=@end_unix_date*1000

/Для отладки/
SELECT @begin_unix_date
SELECT @end_unix_date
SELECT @select_timestamp



SELECT [fromJID]
,[toJID]
,[sentDate],
,[body]

FROM [JABBER].[dbo].[ofMessageArchive]

WHERE sentDate > @select_timestamp
2 мар 12, 03:07    [12180689]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы от чайника по T-SQL  [new]
Sack
Member

Откуда:
Сообщений: 163
Виталий из Петербурга,
А что у вас происходит в функции dbo.UNIX_TIMESTAMP()?
Может приведете код?
2 мар 12, 04:58    [12180749]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы от чайника по T-SQL  [new]
Виталий из Петербурга
Member

Откуда:
Сообщений: 55
Собственно вот, но она здесь не причем (найдено в Инете)

CREATE FUNCTION UNIX_TIMESTAMP (@ctimestamp datetime)
RETURNS integer
AS
BEGIN
/* Function body */
declare @return integer
SELECT @return = DATEDIFF(SECOND,{d '1970-01-01'}, @ctimestamp)
return @return
END
2 мар 12, 05:07    [12180751]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы от чайника по T-SQL  [new]
Guf
Member

Откуда: Новосибирск
Сообщений: 659
Виталий из Петербурга,
Оно?
DECLARE  @d           DATETIME
       , @second      BIGINT
       , @millisecond INT
       , @sentDate    BIGINT
;
SELECT  @d           = GETDATE()
      , @second      = DATEDIFF(SECOND, '19700101', GETDATE())
      , @millisecond = DATEPART(MILLISECOND, GETDATE())
      , @sentDate    = DATEDIFF(SECOND, '19700101', GETDATE()) * CAST(1000 AS BIGINT) + DATEPART(MILLISECOND, GETDATE())
;
SELECT  @d           AS 'дата'
      , @second      AS 'кол-во секунд'
      , @millisecond AS 'довесок из миллисекунд'
      , @sentDate    AS '"колонка sentdate\bigint"'
      , DATEADD(MILLISECOND, @sentDate % 1000, DATEADD(SECOND, @sentDate / 1000, '19700101')) AS '"человекочитаемый вид"'
;
2 мар 12, 06:20    [12180771]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы от чайника по T-SQL  [new]
Виталий из Петербурга
Member

Откуда:
Сообщений: 55
А реально как-то из этого сделать хранимкю процедуру?
Т. е чтобы я мог написать select a,b,c,(d as e)?
2 мар 12, 09:22    [12181061]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы от чайника по T-SQL  [new]
SamMan
Member

Откуда: Moscow
Сообщений: 759
Виталий из Петербурга
А реально как-то из этого сделать хранимкю процедуру?


Из любого валидного T-SQL запроса можно сделать ХП, по большому счету. Только не она вам нужна, а функция. Которую, впрочем, тоже можно.

Виталий из Петербурга
select a,b,c,(d as e)


Но так вы по любому писать не сможете, у нас же тут T-SQL, не C#. А вот ф-ию в списке колонок селекта - вполне можно, к примеру:
select OrdID, OrdSum as FullSum, dbo.Fn1(OrdSum) as [SumWith10%Discount] FROM T1

Fn1 - функция, колонка OrdSum - аргумент.
2 мар 12, 14:08    [12183370]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы от чайника по T-SQL  [new]
Виталий из Петербурга
Member

Откуда:
Сообщений: 55
Спасибо. Буду сегодня пробовать (Я просто первый свой запрос в жизни пишу)
2 мар 12, 15:21    [12184067]     Ответить | Цитировать Сообщить модератору
 Re: Вопросы от чайника по T-SQL  [new]
Виталий из Петербурга
Member

Откуда:
Сообщений: 55
Вопрос2. Имеется запрос, выдающий нужный результат.
Насколько целесообразно, с точки зрения технологической культуры превращать его в хранимую процедуру (чтобы разделить выборку из базы и отправку результатов по почие)
Если целесообразно, то как? (select to procedure)

Вопрос 3. Как отослать его результаты по почте?





P.S Сам запрос для справки и критики ниже
Кстати удалось обойтись без чужих хранимок

DECLARE @current_unix_date bigint
DECLARE @begin_unix_date bigint
DECLARE @lastModified bigint

set @current_unix_date = DATEDIFF(s, '19700101', GETDATE())
set @begin_unix_date = @current_unix_date-5184000

select DATEADD(s, @current_unix_date, '19700101') as "Дата отчета"
--select @begin_unix_date--


SELECT [fromJID]as "отправитель"
,[toJID] as "получатель"
,DATEADD(s, sentDate/1000, '19700101') as "время"
,[body] as "текст"
FROM [JABBER].[dbo].[ofMessageArchive]
WHERE sentDate > @begin_unix_date
8 мар 12, 23:39    [12216389]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить