如何更新时间段在固定范围之内

ForFumm 2012-12-02 11:58:37

--比如:

DECLARE @T1 DATETIME
DECLARE @T2 DATETIME
SET @T1='2012-12-25 00:00:00.000'
SET @T2='2012-12-30 18:30:21.542'

--如果@T1,@T2 时间间隔超过83小时,则修改@T1 时间,但要求修改的时间段小时部分在07-18点之间
...全文
149 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
专注or全面 2012-12-02
  • 打赏
  • 举报
回复

--不大明白啊,那你把@t1改成在@t2的基础上加减三天的一个随机数,再处理小时问题
DECLARE @T1 DATETIME
DECLARE @T2 DATETIME
SET @T1='2012-12-25 00:00:00.000'
SET @T2='2012-12-30 18:30:21.542'
declare @i int
select @i =Datediff(HOUR ,@T1,@T2)
if(@i>83)
begin
	
	set @T1 = DATEADD(DAY, -cast(left(4*RAND(),1) as int),convert(varchar(20),@T2,23))
	set @T1 = DATEADD(HOUR, 7+cast(left(RAND()*11,1) as int),@T1)
	select @T1
	select Datediff(HOUR ,@T1,@T2)
end
AcHerat 元老 2012-12-02
  • 打赏
  • 举报
回复
引用 2 楼 x_wy46 的回复:
SQL code?? 123456789101112 随机数搞错了 DECLARE @T1 DATETIME DECLARE @T2 DATETIME SET @T1='2012-12-25 00:00:00.000'SET @T2='2012-12-30 18:30:21.542'declare @i intselect @i =Datediff(HOUR ,@T1,@T2)……
要考虑@T1不是0点时怎么做。
ForFumm 2012-12-02
  • 打赏
  • 举报
回复
是要修改@T1时间,确保@T1,@T2 时间间隔在83以内,且修改后@T1 的时间小时部分在 07-18点之间
专注or全面 2012-12-02
  • 打赏
  • 举报
回复
随机数搞错了
DECLARE @T1 DATETIME
DECLARE @T2 DATETIME
SET @T1='2012-12-25 00:00:00.000'
SET @T2='2012-12-30 18:30:21.542'
declare @i int
select @i =Datediff(HOUR ,@T1,@T2)
if(@i>83)
begin
	set @T1 = DATEADD(HOUR, 7+cast(left(RAND()*11,1) as int),@T1)
	print @T1
end
专注or全面 2012-12-02
  • 打赏
  • 举报
回复


DECLARE @T1 DATETIME
DECLARE @T2 DATETIME
SET @T1='2012-12-25 00:00:00.000'
SET @T2='2012-12-30 18:30:21.542'
declare @i int
select @i =Datediff(HOUR ,@T1,@T2)
if(@i>83)
begin
	set @T1 = DATEADD(HOUR,left(RAND()*18,2),@T1)
	print @T1
end
ForFumm 2012-12-02
  • 打赏
  • 举报
回复
--笨办法,求简化
DECLARE @T1 DATETIME 
DECLARE @T2 DATETIME 
DECLARE @N INT
SET @T1='2012-12-25 00:00:00.000'
SET @T2='2012-12-30 18:30:21.542'

IF (DATEDIFF(hh,@T1,@T2) > 83 ) 
    BEGIN
     SET @T1=(DATEADD(hh,DATEDIFF(hh,@T1,@T2)-83+CAST( rand()*9 +1 AS INT ),@T1))
     
     SET @N= DATEPART(hh,@T1)
     IF (@N<7) 
     SET @T1=DATEADD(hh,8,@T1)
     IF (@N>18)
     SET @t1=DATEADD(hh,-5, @t1)
     
     PRINT @T1     
    END
你的选择B 2012-12-02
  • 打赏
  • 举报
回复

--比如: 
DECLARE @T1 DATETIME
DECLARE @T2 DATETIME
SET @T1='2012-12-25 00:00:00.000'
SET @T2='2012-12-30 18:30:21.542'

DECLARE @T3 DateTime
SET @T3='2012-12-30 15:30:21.542' 

if DATEDIFF(HOUR,@T1,@T2)>83 and DATEPART(HOUR,@T3)>7 and DATEPART(HOUR,@T3)<18
begin
select @T1
set @T1='2012-12-25 13:00:00.000'
end

select @T1

34,590

社区成员

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

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