2013-07-12 84 views
0

我想清除邮编列上的数据。从列中选择随机值

到目前为止,我有

declare @postcode table 
(
letter1 varchar(4) 
,number1 varchar(4) 
,number2 varchar(4) 
,letter3 varchar(4) 
) 

insert into @postcode values 
('a','1','1','a'), 
('b','2','2','b'), 
('c','3','3','c') 

一路下来字母表

(null,'37','37',null) 

我的问题是,我需要选择一个随机字母,数字则函,邮编变成了寻找像

d12 4RF 

我的代码的其余部分如下:

declare @postcodemixup table 
         (ID int identity(1,1) 
         ,Postcode varchar(20)) 

declare @rand varchar(33) 

/*pick a random row and mash it up */ 
declare @realpostcode varchar (30) 

select @realpostcode = letter1 + '' +number1 + ' ' + number1 + '' + letter2 
from @postcode 
where letter1 = 'a' 

select @realpostcode 

insert into @postcodemixup values(@realpostcode), (@realpostcode) 

select * from @postcodemixup 

任何答案,阅读材料或建议将是伟大的。

谢谢

周杰伦

+0

所以基本上你需要创建一个varchar与随机letter1 + number1 + number2 + letter2? –

+0

所以你只需要一个随机的nuber生成器? –

回答

1

不知道这是你需要的东西,但假设所需的计算公式为“字母数字 - 数字 - 空格 - 数字 - 字母 - 字母“(根据图片),数据可以被生成,例如以下声明:

;with 
    A as (select cast(char((rand(checksum(newid())) * 26) + ascii('A')) as varchar(10)) A), 
    D as (select cast(cast(rand(checksum(newid())) * 10 as int) as varchar(10)) D) 
select top (10000) 
    row_number() over (order by @@spid) as id, 
    A1.A + D1.D + D2.D + ' ' + D3.D + A2.A + A3.A as postcode 
from sys.all_columns c1, sys.all_columns c2, 
    A A1, D D1, D D2, D D3, A A2, A A3 
+0

i-one - 太棒了!非常感谢你。 – Jay

1

一些事情,可能会有所帮助:

拿到1和37之间的随机整数:CONVERT(int, RAND() * 37) + 1

要获得一个随机的信:CHAR((RAND() * 26) + ASCII('A'))

如果你想要一个随机的行,你可以尝试这个,但它不会特别快速:

declare @rowCount int 
    , @randomRow int 

select @rowCount = COUNT(*) FROM Table1 
select @randomRow = RAND() * @rowCount + 1 

With A 
as (
    select Table1.* 
     , rownumber = ROW_NUMBER() OVER (Order BY ID) -- order by something, doesn't matter what 
    from Table1 
) 
select * 
from A 
where rownumber = @randomRow 
+0

谢谢你的答案(尽管Ann L--你的头已经过去了,我还是很初级的!)。我需要它为我指定的行生成一个随机邮编。 所以我的结果像http://oi42.tinypic.com/i2q0z8.jpg – Jay

+0

不客气!很高兴你解决了问题! –

0

如果你随机邮政编码必须基于价值观,在@postcode表预定义,尝试此查询:

set @realpostcode = (select top 1 letter1 from @postcode order by NEWID()) + 
       (select top 1 number1 from @postcode order by NEWID()) + 
       (select top 1 number2 from @postcode order by NEWID()) + 
       (select top 1 letter2 from @postcode order by NEWID())