-2

我正在处理一个需要 DATE 的查询!!

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

有人知道我的错误在哪里吗?

谢谢

4

2 回答 2

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 行,@Yesterday 和 @Today 变量仍然是 DATETIME,因为它是这样声明的。

编辑:正如对我的回答的评论中提到的,您需要一个变量来传递给该过程。因此,正确的解决方法是在开始时将变量声明为 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)

然后按照您最初的方式调用该过程。

于 2012-06-08T08:38:28.517 回答
0

我的猜测是 getdate()-1 部分是错误的。

另外,你正在制作dateadddatediff为什么?试试这样:

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
于 2012-06-08T08:31:51.097 回答