日期:2014-05-19  浏览次数:20372 次

根据要求生成随机数的问题
要求
1.生成的数字大于10000000小于20000000
2.随机数第7位都为2
3.前6位数字相加结果的个位数是第8位
4.生成的数字写入表abc(只有一个字段num)

就60分了,答对就请拿走,谢谢谢谢



------解决方案--------------------
先生成一个满足条件的所有数字的表,然后

select top 1 id from t order by newid()
------解决方案--------------------
--以下SQL语句用于生成满足条件的数值:
set rowcount 10000000
select identity(int,10000000,1) as id into # from sysobjects a,sysobjects b,sysobjects c
set rowcount 0

delete from #
where
(id/10000000+(id/1000000)%10+(id/100000)%10+(id/10000)%10+(id/1000)%10+(id/100)%10) <> id%10
or
(id/10)%10 <> 2

select count(*) from #

truncate table #
drop table #
------解决方案--------------------

DECLARE
@begin int,
@end int,
@value varchar(100)
SELECT
@begin = 10000000,
@end = 20000000

-- 随机数
SELECT
@value = @begin
+ (ABS(CHECKSUM(NEWID())) % (@end - @begin + 1))

-- 处理第 7 位
IF SUBSTRING(@value, 7, 1) <> 2
SET @value = STUFF(@value, 7, 1, 2)

-- 处理第 8 位
DECLARE @a int, @b int
SELECT
@a = 1,
@b = 0
WHILE @a <= 6
SELECT
@b = @b + SUBSTRING(@value, @a, 1),
@a = @a + 1
SET @value = STUFF(@value, 8, 1, RIGHT(@b, 1))
SELECT CONVERT(int, @value)