sql 添加时间段内随机时间

DECLARE @dt1 DATETIME,@dt2 DATETIME,@a BIGINT,@b BIGINT
SET @dt1='2010-01-01'--開始日期
SET @dt2='2010-06-30'--結束日期
 
SELECT @a=CAST(@dt1 AS BIGINT),@b=CAST(@dt2-@dt1 AS BIGINT)
 
DECLARE @t TABLE(ID INT,dt datetime)
 
DECLARE @i INT
SET @i=0
 
WHILE @i<100
BEGIN
    INSERT @t
    SELECT 
        @i+1,CAST(ABS(CHECKSUM(newID()))%@b+@a AS DATETIME)+RAND() 
    SET @i=@i+1
end
SELECT * FROM @t
年月日,时分秒 都是随机的


修改评论中的时间

DECLARE @dt1 DATETIME,@dt2 DATETIME,@a BIGINT,@b BIGINT
SET @dt1='2010-01-01'--開始日期
SET @dt2='2010-06-30'--結束日期
 
SELECT @a=CAST(@dt1 AS BIGINT),@b=CAST(@dt2-@dt1 AS BIGINT)
update dbo.EvaluationReply SET  time= CAST(ABS(CHECKSUM(newID()))%@b+@a AS DATETIME)+RAND()

--修改时间中的时分秒为创建时间的时分秒
UPDATE Evaluation SET Time=convert(char(10),Time,120)+' '+convert(char(8),CreateTime,114) 

写个游标修改评论下的回复 时间,不能超过当前评论的时间

ALTER PROC [dbo].[Proc_UpdateEvaluationReplyCnt]
AS
BEGIN

DECLARE @id INT 
DECLARE @time DATETIME
DECLARE CURStaus1_PLAN CURSOR FOR
    --查询所有用户信息
        SELECT id,time FROM dbo.Evaluation 
        OPEN CURStaus1_PLAN
    FETCH NEXT FROM CURStaus1_PLAN INTO @id,@time
    WHILE (@@FETCH_STATUS = 0)
    BEGIN

DECLARE @dt1 DATETIME,@dt2 DATETIME,@a BIGINT,@b BIGINT
SET @dt1=CONVERT(varchar(100), @time, 23)--開始日期
SET @dt2=CONVERT(varchar(100), dateadd(day,7,@time), 23)--結束日期
 
SELECT @a=CAST(@dt1 AS BIGINT),@b=CAST(@dt2-@dt1 AS BIGINT)

UPDATE dbo.EvaluationReply SET  time=
CAST(ABS(CHECKSUM(newID()))%@b+@a AS DATETIME)+RAND()  where  EvaluationId=@id


    FETCH NEXT FROM CURStaus1_PLAN INTO @id,@time
    END 
    CLOSE CURStaus1_PLAN
    DEALLOCATE CURStaus1_PLAN
    
END

 

sql日期与随机数问题的相关整理

SELECT * FROM NORTHWIND..ORDERS ORDER BY NEWID()
–随机排序
SELECT TOP 10 * FROM NORTHWIND..ORDERS ORDER BY NEWID()
–从ORDERS 表中随机取出10 条记录
示例
A.对变量使用NEWID 函数
以下示例使用NEWID() 对声明为UNIQUEIDENTIFIER 数据类型的变量赋值。在测
试UNIQUEIDENTIFIER 数据类型变量的值之前,先输出该值。
— CREATING A LOCAL VARIABLE WITH DECLARESET SYNTAX.
DECLARE @MYID UNIQUEIDENTIFIER
SET @MYID = NEWID()
PRINT ‘VALUE OF @MYID IS ‘+ CONVERT(VARCHAR(255), @MYID)
下面是结果集:
VALUE OF @MYID IS 6F9619FF-8B86-D011-B42D-00C04FC964FF
注意:
NEWID 对每台计算机前往的值各不相同。所显示的数字仅起解释说明的作用。
随机函数:RAND()
在查询分析器中执行:SELECT RAND(),可以看到结果会是类似于这样的随机小数:
0.36361513486289558,像这样的小数在实际应用中用得不多,一般要取随机数都会取随机
整数。那就看下面的两种随机取整数的方法:
1、
A:SELECT FLOOR(RAND()*N) —生成的数是这样的:12.0
B:SELECT CAST( FLOOR(RAND()*N) AS INT) —生成的数是这样的:12
2、
A:SELECT CEILING(RAND() * N) —生成的数是这样的:12.0
B:SELECT CAST(CEILING(RAND() * N) AS INT) —生成的数是这样的:12
其中里面的N 是一个你指定的整数,如100,可以看出,两种方法的A 方法是带有.0
这个的小数的,而B 方法就是真正的整数了。
大致一看,这两种方法没什么区别,真的没区别?其实是有一点的,那就是他们的生成随机
数的范围:
方法1 的数字范围:0 至N-1 之间,如CAST( FLOOR(RAND()*100) AS INT)就会生成0
至99 之间任一整数
方法2 的数字范围:1 至N 之间,如CAST(CEILING(RAND() * 100) AS INT)就会生成1
至100 之间任一整数
对于这个区别,看SQL 的联机帮助就知了:
比较CEILING 和FLOOR
CEILING 函数前往大于或等于所给数字表达式的最小整数。FLOOR 函数前往小于或
等于所给数字表达式的最大整数。例如,对于数字表达式12.9273,CEILING 将前往13,
FLOOR 将前往12。FLOOR 和CEILING 前往值的数据类型都与输入的数字表达式的数
据类型相同。
现在,各位就可以根据自己需要使用这两种方法来取得随机数了^_^
另外,还要提示一下各位菜鸟,关于随机取得表中任意N 条记录的方法,很简单,就
用NEWID():
SELECT TOP N * FROM TABLE_NAME ORDER BY NEWID() —-N 是一个你指定的整
数,表是取得记录的条数.
举例:
经过测试发现:
if object_id(‘tb’) is not null
drop table tb
create table tb (s_id int,t_id int, fenshu int)
insert into tb
select 1,1,66 union all
select 1,2,67 union all
select 2,1,65 union all
select 2,2,78 union all
select 3,1,66 union all
select 3,2,55
–这个方法可以给不同数加上不同随机数(newid( ))
select fenshu,(fenshu+cast(ceiling(RAND(CHECKSUM(NEWID()))*10)as int))as fenshu
from tb
–这个方法只能给不同数随机加上相同数(RAND( ))
select fenshu,(fenshu+cast(CEILING(RAND() * 10) AS INT))as fenshu
from tb
或者
SELECT fenshu,fenshu+cast(ceiling(RAND(CHECKSUM(rand()))*10) as int) fenshu2
FROM tb
/*————
66 68
67 74
65 75
78 80
66 73
55 58
66 68
67 69
65 67
78 80
66 68
55 57
————*/

 

Sql Server 中一个非常强大的日期格式化函数

字符串转日期
Select cast(‘2009-01-01’ as datetime)

日期格式转换
Select CONVERT(varchar(100), GETDATE(), 0): 05 16 2006 10:57AM
Select CONVERT(varchar(100), GETDATE(), 1): 05/16/06
Select CONVERT(varchar(100), GETDATE(), 2): 06.05.16
Select CONVERT(varchar(100), GETDATE(), 3): 16/05/06
Select CONVERT(varchar(100), GETDATE(), 4): 16.05.06
Select CONVERT(varchar(100), GETDATE(), 5): 16-05-06
Select CONVERT(varchar(100), GETDATE(), 6): 16 05 06
Select CONVERT(varchar(100), GETDATE(), 7): 05 16, 06
Select CONVERT(varchar(100), GETDATE(),: 10:57:46
Select CONVERT(varchar(100), GETDATE(), 9): 05 16 2006 10:57:46:827AM
Select CONVERT(varchar(100), GETDATE(), 10): 05-16-06
Select CONVERT(varchar(100), GETDATE(), 11): 06/05/16
Select CONVERT(varchar(100), GETDATE(), 12): 060516
Select CONVERT(varchar(100), GETDATE(), 13): 16 05 2006 10:57:46:937
Select CONVERT(varchar(100), GETDATE(), 14): 10:57:46:967
Select CONVERT(varchar(100), GETDATE(), 20): 2006-05-16 10:57:47
Select CONVERT(varchar(100), GETDATE(), 21): 2006-05-16 10:57:47.157
Select CONVERT(varchar(100), GETDATE(), 22): 05/16/06 10:57:47 AM
Select CONVERT(varchar(100), GETDATE(), 23): 2006-05-16
Select CONVERT(varchar(100), GETDATE(), 24): 10:57:47
Select CONVERT(varchar(100), GETDATE(), 25): 2006-05-16 10:57:47.250
Select CONVERT(varchar(100), GETDATE(), 100): 05 16 2006 10:57AM
Select CONVERT(varchar(100), GETDATE(), 101): 05/16/2006
Select CONVERT(varchar(100), GETDATE(), 102): 2006.05.16
Select CONVERT(varchar(100), GETDATE(), 103): 16/05/2006
Select CONVERT(varchar(100), GETDATE(), 104): 16.05.2006
Select CONVERT(varchar(100), GETDATE(), 105): 16-05-2006
Select CONVERT(varchar(100), GETDATE(), 106): 16 05 2006
Select CONVERT(varchar(100), GETDATE(), 107): 05 16, 2006
Select CONVERT(varchar(100), GETDATE(), 108): 10:57:49
Select CONVERT(varchar(100), GETDATE(), 109): 05 16 2006 10:57:49:437AM
Select CONVERT(varchar(100), GETDATE(), 110): 05-16-2006
Select CONVERT(varchar(100), GETDATE(), 111): 2006/05/16
Select CONVERT(varchar(100), GETDATE(), 112): 20060516
Select CONVERT(varchar(100), GETDATE(), 113): 16 05 2006 10:57:49:513
Select CONVERT(varchar(100), GETDATE(), 114): 10:57:49:547
Select CONVERT(varchar(100), GETDATE(), 120): 2006-05-16 10:57:49
Select CONVERT(varchar(100), GETDATE(), 121): 2006-05-16 10:57:49.700
Select CONVERT(varchar(100), GETDATE(), 126): 2006-05-16T10:57:49.827
Select CONVERT(varchar(100), GETDATE(), 130): 18 ???? ?????? 1427 10:57:49:907AM
Select CONVERT(varchar(100), GETDATE(), 131): 18/04/1427 10:57:49:920AM

常用:
Select CONVERT(varchar(100), GETDATE(),: 10:57:46
Select CONVERT(varchar(100), GETDATE(), 24): 10:57:47
Select CONVERT(varchar(100), GETDATE(), 108): 10:57:49
Select CONVERT(varchar(100), GETDATE(), 12): 060516
Select CONVERT(varchar(100), GETDATE(), 23): 2006-05-16

1.  当前系统日期、时间 
    select getdate()  

2. dateadd  在向指定日期加上一段时间的基础上,返回新的 datetime 值
   例如:向日期加上2天 
   select dateadd(day,2,’2004-10-15′)  –返回:2004-10-17 00:00:00.000 

3. datediff 返回跨两个指定日期的日期和时间边界数。
   select datediff(day,’2004-09-01′,’2004-09-18′)   –返回:17

4. datepart 返回代表指定日期的指定日期部分的整数。
  select DATEPART(month, ‘2004-10-15’)  –返回 10

5. datename 返回代表指定日期的指定日期部分的字符串
   select datename(weekday, ‘2004-10-15’)  –返回:星期五

6. day(), month(),year() –可以与datepart对照一下

select 当前日期=convert(varchar(10),getdate(),120) 
,当前时间=convert(varchar(8),getdate(),114) 

select datename(dw,’2004-10-15′) 

select 本年第多少周=datename(week,’2004-10-15′)
      ,今天是周几=datename(weekday,’2004-10-15′)

 

函数 参数/功能
GetDate( ) 返回系统目前的日期与时间
DateDiff (interval,date1,date2) 以interval 指定的方式,返回date2 与date1两个日期之间的差值 date2-date1
DateAdd (interval,number,date) 以interval指定的方式,加上number之后的日期
DatePart (interval,date) 返回日期date中,interval指定部分所对应的整数值
DateName (interval,date) 返回日期date中,interval指定部分所对应的字符串名称

参数 interval的设定值如下:

缩 写(Sql Server) Access 和 ASP 说明
Year Yy yyyy 年 1753 ~ 9999
Quarter Qq 季 1 ~ 4
Month Mm 月1 ~ 12
Day of year Dy y 一年的日数,一年中的第几日 1-366
Day Dd 日,1-31
Weekday Dw w 一周的日数,一周中的第几日 1-7
Week Wk ww 周,一年中的第几周 0 ~ 51
Hour Hh 时0 ~ 23
Minute Mi 分钟0 ~ 59
Second Ss s 秒 0 ~ 59
Millisecond Ms 毫秒 0 ~ 999

本文地址:https://blog.csdn.net/huang714/article/details/107151138

(0)
上一篇 2022年3月21日
下一篇 2022年3月21日

相关推荐