update aabb_f set BloodGroup=ceiling(rand()*4) where IsTrue=0我想让BloodGroup列的数据随机成1~4,可是这样写BloodGroup列的数据都一样(就随机了一次),没有起到随机的作用,怎么改啊??
解决方案 »
- 刚才那个SQL 这次我讲详细点
- 请问下面的错误是怎么回事?关于SQL2005数据库[DBNETLIB][ConnectionWrite(send()).]
- where后面两次用到同一子查询的值应该如何写?
- 高分急求答案!sql2008 数据库创建分区表,用分区表查询比用源表查询慢,求解
- 这个SQL语句哪里错了?
- server2000中存储过程的调用(不同注册服务器的调用)
- 帮帮忙,谢谢
- 新手求助sql问题
- 在利用bcp工具导出数据到文本文件时,如何设参数,使字段间列分隔符用分号、逗号,而不是默认的制表符?
- 难题:!!SQL语句中:select * from tablename 其中tablename能否用变量实现?
- 请教个链接服务器的问题
- 简单的SQL语句
T-SQL中的随机数 1、0-9间的随机整数,包括0和9本身: abs(checksum(newid()))%10 扩展从a-b间的随机整数(a,b本身也是整数): a+abs(checksum(newid()))%(b-a+1) 2、0-1间的随机实数: rand() --或是 rand(checksum(newid())) 由此扩展从a-b间的随机实数: a+rand(checksum(newid()))*(b-a) 注意上面的取法使得取值范围(a,b],若是想要取得(a,b),可以采用下面的表达式 a+rand(checksum(newid()))*(b-a)*0.99999 -- 此处0.99999可以更换为0.999999999,精度根据需要来取
select * from tb
--------------------
单位名称 日期
2 2010-01-01 00:00:00.000
1 2010-01-01 00:00:00.000
1 2010-01-02 00:00:00.000
1 2010-01-03 00:00:00.000
4 2008-04-05 00:00:00.000
2 2006-02-02 00:00:00.000
2 2006-02-02 00:00:00.000测试结果
--> 数据库版本:
--> Microsoft SQL Server 2008 (RTM) - 10.0.1600.22
--> 测试数据:aabb_f
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'aabb_f')
AND type in (N'U'))
DROP TABLE aabb_f
GO---->建表
create table aabb_f([BloodGroup] varchar(20),[IsTrue] int)
go
insert aabb_f
select '1231',0 union all
select 'adsd',0 union all
select '3121',0
GOupdate aabb_f
set BloodGroup=abs(checksum([BloodGroup])%4)
where IsTrue=0--> 查询结果
SELECT * FROM aabb_f
--> 删除表格
--DROP TABLE aabb_f
#2. 用checksum转换成int
#3. 取绝对值
#4. 用4取余,结果可能为0-3
#5. 加1,结果可能为1-4,OK
请理解UPDATE语句的原理
select rand(4) 确实每次结果都一样
但
select rand() 每次结果也不一样啊
FROM sys.columns
两个函数的执行机制不一样。几乎所有函数都是在执行一个查询时只计算一次。只有NEWID()会针对查询的每一行结果进行计算。