跪求解:sql server 列加随机函数问题 ~~~~~~~~~~~~~~~在线等。

dong2006 2010-05-11 03:01:49
请教问题:
create table tab1(
aa int default 0)


insert tab1
select 0

insert tab1
select 3

insert tab1
select 6


insert tab1
select 9

select * from tab1

update tab1 set aa =aa + cast (substring(convert(varchar(15),DATEPART(ms,GETDATE())),1,1) as int )



但是更新的列都是aa+ 固定的数


我想要的结果是 aa+ 随机数


如果用游标是可以完成,但是太慢了. 有没有批量更新的?
...全文
74 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
sprc_lcl 2010-05-11
  • 打赏
  • 举报
回复
newid()应该和Guid标识码差不多吧唯一,是一串16进制数组成的字符串
dong2006 2010-05-11
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 sprc_lcl 的回复:]
就是你要求的每行都加不同的数,你那个随机数肯定不行

你可以试试下面的,并做改动

SQL code
update set tab1 set aa = aa+CAST(LEFT(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(NEWID(), '-', '0'), 'F', '6'), 'E', '5'), 'D', '4'……
[/Quote]
问题解决了。谢谢。 但是有个问题请教。一直以为NEWID() 只是一个随机排序用的函数。用在order by 后面。象你这么用。那么NEWID() 到底是一个什么来的。
通过查询貌似了是一串随机的字符串A50DEBDA-BBA7-463F-BCD2-4A9CD0B295ED
sprc_lcl 2010-05-11
  • 打赏
  • 举报
回复
就是你要求的每行都加不同的数,你那个随机数肯定不行

你可以试试下面的,并做改动
update set tab1 set aa = aa+CAST(LEFT(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(NEWID(), '-', '0'), 'F', '6'), 'E', '5'), 'D', '4'), 'C', '3'), 'B', '2'), 'A', '1'), 4) 
as int)
dong2006 2010-05-11
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 sprc_lcl 的回复:]
sorry,随机数搞不定

给你个东西,再给你个东西,能解决你的问题,但是麻烦
1.select newid() 看看是啥东西
2.取1的结果的前几位(4位?),看下面的网页(16进制转2进制),或你只提出1中的数字
http://zhidao.baidu.com/question/133141514.html
[/Quote]
随机数用这个就可以了。
cast (substring(convert(varchar(15),DATEPART(ms,GETDATE())),1,1) as int

我的问题是 当更新的时候我所有的列都是加上一个相同的数。
打个比方。cast (substring(convert(varchar(15),DATEPART(ms,GETDATE())),1,1) as int 查出的结果是 8
tab1 表列aa 都加8 我要求是没行都加上一个不同的数,
再请教。
问题应该是出在 update tab1 set ....... 这句上。
sprc_lcl 2010-05-11
  • 打赏
  • 举报
回复
16进制转10进制
sprc_lcl 2010-05-11
  • 打赏
  • 举报
回复
sorry,随机数搞不定

给你个东西,再给你个东西,能解决你的问题,但是麻烦
1.select newid() 看看是啥东西
2.取1的结果的前几位(4位?),看下面的网页(16进制转2进制),或你只提出1中的数字
http://zhidao.baidu.com/question/133141514.html
dong2006 2010-05-11
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 sprc_lcl 的回复:]
select rand() * 1000
select cast(rand() * 1000 as int)

你看下结果
[/Quote]

不明白要我看什么,select rand() * 1000 查出的是有小数点
select cast(rand() * 1000 as int)查出是整数。
sprc_lcl 2010-05-11
  • 打赏
  • 举报
回复
select rand() * 1000
select cast(rand() * 1000 as int)

你看下结果
dong2006 2010-05-11
  • 打赏
  • 举报
回复
没有回复,自己顶一下先

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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