时间相加减问题,请各位大哥指点

daqi2010 2009-06-05 11:15:50
CREATE proc ...
@sort int,
@@pact_time DateTime
AS
DECLARE @ok_time DateTime
if(@sort=1)
begin
set @ok_time=@pact_time
end
if(@sort=2)
begin
set @ok_time=datepart(dd,@pact_time)-3
end
....
INSERT INTO pact(pact_time)
VALUES (@ok_time)
当@sort=1时,@ok_time=1900-01-06,
当@sort=2时,@ok_time=null,
为什么不正确,请各位大哥帮指点
...全文
16 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
Rotel-刘志东 2009-06-05
  • 打赏
  • 举报
回复
声明全局变量 @@pact_time DateTime
set @ok_time=@pact_time
Rotel-刘志东 2009-06-05
  • 打赏
  • 举报
回复
CREATE proc ...
@sort int,
@@pact_time DateTime
AS
DECLARE @ok_time DateTime
if(@sort=1)
begin
set @ok_time=@pact_time
end
if(@sort=2)
begin
set @ok_time=datepart(dd,@pact_time)-3
end
....
INSERT INTO pact(pact_time)
VALUES (@ok_time)
当@sort=1时,@ok_time=1900-01-06,
当@sort=2时,@ok_time=null,
ai_li7758521 2009-06-05
  • 打赏
  • 举报
回复
datepart=》DATEADD 
Liyingyue_FFS 2009-06-05
  • 打赏
  • 举报
回复
if(@sort=2) 
begin
set @ok_time=dateadd(day,-3,@pact_time)
end


把@sort=2的部分替换成上面的。

@ok_time 应该是一个时间,而datepart(dd,@pact_time)-3 是一个整数,类型不匹配
--小F-- 2009-06-05
  • 打赏
  • 举报
回复
看看先
shiguangxin 2009-06-05
  • 打赏
  • 举报
回复
时间的加减应该用 dateadd

感觉楼主的程序有问题
set @ok_time=datepart(dd,@pact_time)-3
感觉是不是会出现负数呀
ai_li7758521 2009-06-05
  • 打赏
  • 举报
回复
代码和数据最好完整顶,看不清楚..
Liyingyue_FFS 2009-06-05
  • 打赏
  • 举报
回复
if(@sort=2) 
begin
set @ok_time=dateadd(day,-3,@pact_time)
end
ai_li7758521 2009-06-05
  • 打赏
  • 举报
回复
@@pact_time DateTime ?@pact_time DateTime
JonasFeng 2009-06-05
  • 打赏
  • 举报
回复
[Quote=引用楼主 daqi2010 的帖子:]
CREATE proc ...
@sort int,
@@pact_time DateTime
AS
DECLARE @ok_time DateTime
if(@sort=1)
begin
set @ok_time=@pact_time
end
if(@sort=2)
begin
set @ok_time=datepart(dd,@pact_time)-3
end
....
INSERT INTO pact(pact_time)
VALUES (@ok_time)
当@sort=1时,@ok_time=1900-01-06,
当@sort=2时,@ok_time=null,
为什么不正确,请各位大哥帮指点
[/Quote]

楼主的条件和存储过程写的不一样呀。

稍微修改了下。
CREATE  proc ... 
@sort int,
@@pact_time DateTime
AS
select @pact_time = '1900-01-06'
DECLARE @ok_time DateTime
if(@sort=1)
begin
set @ok_time=@pact_time
end
if(@sort=2)
begin
set @ok_time=dateadd(d,-3,@pact_time)
end
....
INSERT INTO pact(pact_time)
VALUES (@ok_time)
olddown 2009-06-05
  • 打赏
  • 举报
回复
?
jinjazz 2009-06-05
  • 打赏
  • 举报
回复
用print把每个变量都打出来
zhaoyh0530 2009-06-05
  • 打赏
  • 举报
回复
楼主@ok_time 是DateTime,datepart 返回的是int类型
dateadd 返回是datetime,datepart =》dateadd
yingzhilian2008 2009-06-05
  • 打赏
  • 举报
回复
Up

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧