2012-06-08 5 views
-2

Я работаю над запросом, требующим DATE !!SQL конвертировать DATETIME TO VARCHAR?

DECLARE @YesterDay DATETIME, @Today DATETIME 

SET @YesterDay = DateAdd(DD, DateDiff(DD, 0, GETDATE())-1, 0) 
SET @Today = DateAdd(DD, DateDiff(DD, 0, GETDATE()), 0) 
select @YesterDay = convert(varchar, getdate()-1 , 110) 
select @Today = convert(varchar, getdate() , 110) 
EXEC @return_value = [dbo].[post_sec_admin_list_user_log] 
     @pDateFr = @YesterDay , 
     @pDateTo = @Today, 
     @pName = '', 
     @pSec = NULL 


@DateFr is varchar(50) 
@DateT0 is varchar(50) 

@dateFr и @dateTo оба varchar ..

И я пытаюсь выполнить его, распечатать формат времени, как это 2011-06-09 16:15:38.927

заявление об ошибке

Конверсия тип данных varchar для типа данных datetime привел к превышению значения вне диапазона.

Кроме того, формат varchar мне нужно MM-DD-YYYY

Каждый знает, где моя ошибка в?

благодаря

+3

Положите вашу ошибку в вопрос! –

+0

привет, я редактировал. уже – cheeseng

+1

Какой RBDMS? Я предполагаю, что SQL Server. Я также предполагаю, что ошибка происходит в хранимой процедуре 'post_sec_admin_list_user_log', на которую вы не разместили код. – Bridge

ответ

0

Я думаю, что GETDATE() - 1 часть неправильна.

Кроме того, вы делали dateadd и datediff почему? Попробуйте так:

SET @YesterDay = dateadd(dd, -1, GETDATE()) 
SET @Today = GETDATE() 
select @YesterDay = convert(varchar(50), dateadd(dd, -1, getdate()) , 110) 
select @Today = convert(varchar(50), getdate() , 110) 
EXEC @return_value = [dbo].[post_sec_admin_list_user_log] 
     @pDateFr = @YesterDay , 
     @pDateTo = @Today, 
     @pName = '', 
     @pSec = NULL 
+0

ваш код лучше, но код OP отправлен правильно рассчитан «вчера». Но это не то, что вызывает проблему. Проблема: вчера и сегодня определены как DATETIME, и он пытается передать их как varchar. –

+0

@FedorHajdu действительно :) –

1

Ваш код запутанным:

DECLARE @YesterDay DATETIME, @Today DATETIME 
SET @YesterDay = DateAdd(DD, DateDiff(DD, 0, GETDATE())-1, 0) 
SET @Today = DateAdd(DD, DateDiff(DD, 0, GETDATE()), 0) 
select @YesterDay = convert(varchar, getdate()-1 , 110) 
select @Today = convert(varchar, getdate() , 110) 

Так вы объявляете его как DATETIME, установите значение с DateDiff затем перезаписать это значение с VARCHAR представления даты пересчитывается с использованием другой способ.

В строке 4 и 5 @ Вчера и переменные @Today по-прежнему DATETIME, потому что это объявлено таким образом.

EDIT: Как уже упоминалось в комментарии к моему ответу, для прохождения процедуры требуется переменная. Итак, правильным решением было бы объявить переменные как VARCHAR (50) в начале и сделать преобразование напрямую.

DECLARE @YesterDay VARCHAR(50), @Today VARCHAR(50) 
SELECT @YesterDay = convert(varchar(50), dateadd(dd, -1, getdate()) , 110) 
SELECT @Today = convert(varchar(50), getdate() , 110) 

И затем вызовите процедуру так, как вы делали первоначально.

+1

На самом деле вы не можете использовать ничего, кроме переменных или статических значений при передаче параметров, поэтому CONVERT (varchar, @Yesterday, 110) сначала необходимо назначить переменной. – MartW

+0

@CodeByMoonlight Вы правы, спасибо, исправлены. –

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