Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Преобразование типов  [new]
Преобразование типов
Guest
Добрый день всем.
Меня смущает вопрос преобразования типов.
Я хочу сделать ХП процедуру которая будет отбирать данные по датам. Обновленные Product ID за последние 10 часов например
Для примера я использовал тестовую базу данных AdventureWorks 2008 R2

Помогите с преобразованием типов.

GO 
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
if (object_id('tempdb..##P') is not null) drop procedure ##P
GO
create PROCEDURE ##P
AS
Declare @sql nvarchar (500),
	    @dt1 int  ,
            @dt2 int

          
if (object_id('tempdb..##T') is not null) drop table ##T
create table ##T
(productID int
)

while DATEDIFF(mm, @dt1, @dt2 )> 0


begin 
	
SET @dt1 = DATEADD(hour, -10, @dt2)
SET @dt2 = GETDATE()

-- Нужно преобразовать @dt1 и @dt2 в тип данных datetime, либо если возможно в текст. 
-- Либо может новые переменные сделать
-- Пытаюсь преобразовать F(x) convert все равно @dt2 идет как int 
-- Нужен формать 2017-03-10 00:00:00.000 - как в таблице Production.ProductDocument

--SET @dt2 = CONVERT(GETDATE(), DATETIME, 126) - это не работает

set @sql = 'SELECT ProductID
from Production.ProductDocument
where
ModifiedDate between @dt1 and @dt2 
'

set @dt1=@dt1+1
prinT @dt1

insert into ##T 
exec sp_executesql @sql
END
select ProductID from ##T

exec ##P


Сообщение было отредактировано: 20 мар 17, 00:05
19 мар 17, 23:58    [20311946]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование типов  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37050
Преобразование типов
Declare @sql nvarchar (500),
	    @dt1 int  ,
            @dt2 int

Преобразование типов
--Нужно преобразовать @dt1 и @dt2 в тип данных datetime, либо если возможно в текст. 
-- Пытаюсь преобразовать F(x) convert все равно @dt2 идет как int 


Т.е. вы объявляете переменные как int, а потом удивляетесь, что в них в итоге таки int оказывается? Ну даж не знаю, что сказать...

Сообщение было отредактировано: 20 мар 17, 00:10
20 мар 17, 00:08    [20311975]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование типов  [new]
Преобразование типов
Guest
Гавриленко Сергей Алексеевич,

Да, это нужно для работы цикла.
Я пытался другие переменные специально для запроса объявить.
Но то же какая то ошибка

GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
if (object_id('tempdb..##P') is not null) drop procedure ##P
GO
create PROCEDURE ##P
AS
Declare @sql nvarchar (500),
@dt1 int ,
@dt2 INT,
@zt1 DATETIME,
@zt2 DATETIME



if (object_id('tempdb..##T') is not null) drop table ##T
create table ##T
(productID int
)
SET @dt1 = DATEADD(hour, -10, @dt2)
SET @dt2 = GETDATE()
while DATEDIFF(mm, @dt1, @dt2 )> 0


begin


SET @zt1 = CONVERT(@dt1, DATETIME, 126)
SET @zt2 = CONVERT(@dt2, DATETIME, 126)

-- Нужно преобразовать @dt1 и @dt2 в тип данных datetime, либо если возможно в текст.
-- Либо может новые переменные сделать
-- Пытаюсь преобразовать F(x) convert все равно @dt2 идет как int
-- Нужен формать 2017-03-10 00:00:00.000 - как в таблице Production.ProductDocument

--SET @dt2 = CONVERT(GETDATE(), DATETIME, 126) - это не работает


set @sql = 'SELECT ProductID
from Production.ProductDocument
where
ModifiedDate between @zt1 and @zt2
'

set @dt1=@dt1+1
prinT @dt1

insert into ##T
exec sp_executesql @sql
END
select ProductID from ##T

exec ##P
20 мар 17, 00:19    [20311997]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование типов  [new]
Преобразование типов
Guest
Преобразование типов,

Сообщение 102, уровень 15, состояние 1, процедура ##P, строка 23
Неправильный синтаксис около конструкции "@dt1".
Сообщение 102, уровень 15, состояние 1, процедура ##P, строка 24
Неправильный синтаксис около конструкции "@dt2".
20 мар 17, 00:21    [20312001]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование типов  [new]
s_ustinov
Member

Откуда: Munchen, DE
Сообщений: 2202
Преобразование типов,
Почитайте про разницу между императивными и декларативными языками.

А после ответьте на простой вопрос:
Зачем вам цикл? :)
20 мар 17, 01:36    [20312111]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование типов  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
Преобразование типов,

читайте справку, Вы занимаетесь "интуитивным программированием".
20 мар 17, 10:58    [20312897]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование типов  [new]
Преобразование типов
Guest
s_ustinov,
цикл нужен и временная таблица нужна, эти данные будет использоваться в дальнейших вычислениях.
20 мар 17, 13:11    [20313629]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование типов  [new]
s_ustinov
Member

Откуда: Munchen, DE
Сообщений: 2202
Преобразование типов
s_ustinov,
цикл нужен и временная таблица нужна, эти данные будет использоваться в дальнейших вычислениях.

Для вот этого:
Преобразование типов
будет отбирать данные по датам. Обновленные Product ID за последние 10 часов например

цикл НЕ нужен.

Впрочем, для обучения преобразования из int в дату и обратно могут оказаться полезными - так что продолжайте двигаться своим путём.
20 мар 17, 13:42    [20313834]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить