产生随机时间

B525068254 2014-09-29 10:39:05
产生随机时间

19:30 和20:00两个参数

每次执行都得到不同的时间(大于19:30,小于20:30)
...全文
310 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
俺是大菠萝 2014-09-30
  • 打赏
  • 举报
回复
引用 15 楼 roy_88 的回复:
declare @dt1 time,@dt2 time
select @dt1='19:30',@dt2='20:00'


select convert(varchar(5),dateadd(n,abs(checksum(newid()))%datediff(n,@dt1,@dt2),@dt1),8)

declare @dt1 time,@dt2 time
select @dt1='23:50',@dt2='00:01'
 
 
select convert(varchar(5),dateadd(n,abs(checksum(newid()))%datediff(n,@dt1,@dt2),@dt1),8) FROM sys.tables
这样写有些小问题,就是不能跨天


-----
20:03
03:47
01:43
23:21
05:21
13:07
23:57
00:53
15:32
08:19

(10 行受影响)


中国风 2014-09-30
  • 打赏
  • 举报
回复
先取相差分钟数,再用随机系统函数实现
中国风 2014-09-30
  • 打赏
  • 举报
回复
declare @dt1 time,@dt2 time
select @dt1='19:30',@dt2='20:00'


select convert(varchar(5),dateadd(n,abs(checksum(newid()))%datediff(n,@dt1,@dt2),@dt1),8)
B525068254 2014-09-30
  • 打赏
  • 举报
回复
呵呵,客户会给两个时间,得出中间的随机时间
习惯性蹭分 2014-09-30
  • 打赏
  • 举报
回复


declare @stime time,
        @etime time
select @stime='19:30',
       @etime='20:30'
 select dateadd(second,datediff(second,@stime,@etime)*rand(),@stime )            
B525068254 2014-09-30
  • 打赏
  • 举报
回复
是解决了,也是我发的贴子
引用 15 楼 roy_88 的回复:
declare @dt1 time,@dt2 time
select @dt1='19:30',@dt2='20:00'


select convert(varchar(5),dateadd(n,abs(checksum(newid()))%datediff(n,@dt1,@dt2),@dt1),8)
提示 消息 2715,级别 16,状态 3,第 3 行 第 1 个列、参数或变量: 找不到数据类型 time。 参数或变量 '@dt2' 的数据类型无效。 消息 2715,级别 16,状态 3,第 3 行 第 2 个列、参数或变量: 找不到数据类型 time。 参数或变量 '@dt1' 的数据类型无效。 我的是sql2005
wtujedp 2014-09-30
  • 打赏
  • 举报
回复
select left(cast(dateadd(mi,floor(rand()*(DATEDIFF(MI,cast('07:30' as time), cast('08:00' as time)))) ,cast('07:30' as time)) as varchar),5)
xiaodongni 2014-09-30
  • 打赏
  • 举报
回复
引用 2 楼 B525068254 的回复:
你才用了19:30 的参数,还有20:00的参数没用 我要大于19:30,小于20:00的随机时间
你啥意思。就是输入2个时间@date1,@date2 然后随机得到一个这2个时间之间的时间吗(不包含@date1,包含@date2)是这样吗
还在加载中灬 2014-09-30
  • 打赏
  • 举报
回复
你把我上面21:00改成20:00就可以了
xiaodongni 2014-09-30
  • 打赏
  • 举报
回复
引用 7 楼 wtujedp 的回复:
[quote=引用 6 楼 alimake 的回复:] 为啥一定要用两个参数,实现功能不就好了
万一楼主要两个参数传进去,得出一个结果呢[/quote] 每次执行都得到不同的时间(大于19:30,小于20:30) 需要得出2个时间吗?
还在加载中灬 2014-09-30
  • 打赏
  • 举报
回复
引用 2 楼 B525068254 的回复:
你才用了19:30 的参数,还有20:00的参数没用 我要大于19:30,小于20:00的随机时间
可以把20:00也用进去 参数 #1 修改如下
select top 1 substring(convert(char,DATEADD(mi,number,dates),120),12,5) as n
 from (select  number from master..spt_values t
where t.type='p' and number>0 and number<DATEDIFF(MI,'19:30','21:00')) as p cross join (select '19:30' as dates) as t
order by NEWID()
霜寒月冷 2014-09-30
  • 打赏
  • 举报
回复
declare @s varchar(10)
declare @s1 varchar(10)
set @s='19:30'
set @s1='20:00'

select  top 1  convert(varchar(5), dateadd(second,number,cast ((  CONVERT(varchar(100), GETDATE(), 23)+'  '+@s) as datetime )),24)   from master..spt_values 
where type='p' and number>=1
and  dateadd(second,number,cast ((  CONVERT(varchar(100), GETDATE(), 23)+'  '+@s) as datetime ))<=cast ((  CONVERT(varchar(100), GETDATE(), 23)+'  '+@s1) as datetime )
order by newid()
wtujedp 2014-09-30
  • 打赏
  • 举报
回复
引用 6 楼 alimake 的回复:
为啥一定要用两个参数,实现功能不就好了
万一楼主要两个参数传进去,得出一个结果呢
xiaodongni 2014-09-30
  • 打赏
  • 举报
回复
为啥一定要用两个参数,实现功能不就好了
卖水果的net 版主 2014-09-30
  • 打赏
  • 举报
回复

-- 19:30 加上 0 - 30 分钟的随机数
RAND() * 30 from (select 1 c )x 
Tiger_Zhao 2014-09-30
  • 打赏
  • 举报
回复
好像另外一个帖子中把你这个问题也顺便解决了。
xiaodongni 2014-09-30
  • 打赏
  • 举报
回复



select top 1 substring(convert(char,DATEADD(mi,number,dates),120),12,5) as n
 from (select  number from master..spt_values t
where t.type='p' and number>0 and number<=datediff(mi,@date,@date2) as p cross join (select '19:30' as dates) as t
order by NEWID()
B525068254 2014-09-29
  • 打赏
  • 举报
回复
一楼还是方便的, 三楼的会出现20:2,这样显示不对要补0
无涯大者 2014-09-29
  • 打赏
  • 举报
回复

if exists (select * from sys.objects where name='randint') 
    drop procedure randint
go
 
create procedure randint @begin int, @end int, @result int output
as 
begin
    select @result = @begin+floor(rand()*(@end-@begin+1)) 
    --rand() 返回一个介于 0 到 1(不包括 0 和 1)之间的伪随机 float 值    
end
go
 
-- 调用的例子
declare @rand1 int
declare @rand2 int
exec randint 0, 30, @rand1 output
exec randint 30, 60, @rand2 output
select '19'+':'+ cast(@rand2 as nvarchar(4))
select '20'+':'+ cast(@rand1 as nvarchar(4))
go
供参考!
B525068254 2014-09-29
  • 打赏
  • 举报
回复
你才用了19:30 的参数,还有20:00的参数没用 我要大于19:30,小于20:00的随机时间
加载更多回复(1)

34,593

社区成员

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

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