在sql中生成随机名称

时间:2013-07-02 17:08:10

标签: sql sql-server sql-server-2008

我有5个男性和女性的随机名字。我需要根据性别插入随机名称。但是我们如何从SQL中的一组5个名称中随机插入名称。可能吗?

7 个答案:

答案 0 :(得分:9)

select name from table order by newid()

答案 1 :(得分:3)

创建一个包含名称和整数ID的表。然后使用带有%5的RAND()来包含0到4之间的值。如果你想要男性,可以加1,如果你想要女性,可以加6。像这样:

Create table RandomNames
(id int,
 name varchar(100),
 gender char(1)
)

insert into RandomNames
(id, name,gender)
select 1,'Bill','M'
union
select 2,'John','M'
union
select 3,'Steve','M'
union
select 4,'Mike','M'
union
select 5,'Phil','M'
union
select 6,'Sarah','F'
union
select 7,'Ann','F'
union
select 8,'Marie','F'
union
select 9,'Liz','F'
union
select 10,'Stephanie','F'

declare @wantedGender char(1)

select @wantedGender = 'M'

select name 
from RandomNames
where id =  (CAST(RAND()*100 as int) % 5) + case when @wantedGender = 'M' then 1 else 6 end 

答案 2 :(得分:1)

将男性的5个随机名称存储在一个表格中,将5个随机名称存储在另一个表格中。选择1到5之间的随机整数,并使用内部联接交叉引用男性或女性表。

答案 3 :(得分:1)

目前处理此问题。 Rand()不会工作,你将获得所有300行的相同随机数。 NewID()不会给你一个可用的值。但是,您可以使用以下公式获得每行1到5之间的随机值。 NewID和Checksum每次给你一个随机数,但是包含负数,然后除以4并取余数(0-4),然后你取这个数的绝对值并加1。然后使用该随机数从名称表中选择一个值。

ABS(Checksum(NewID()) % 4) + 1

在命令中使用它:

Create table randomnames (ID int identity, name)
insert into randomnames (name)
Values ('Tom', 'Dick', 'Harry', 'Jughead', 'Archie'
          ,'Sally','Sue','Peggy', 'Betty', 'Veronica')

update sometablename
set Name = case gender
    when 'M' then (select name from randomnames where ID = ABS(Checksum(NewID()) % 4)) + 1
    when 'F' then (select name from randomnames where ID = ABS(Checksum(NewID()) % 4)) + 6
end

答案 4 :(得分:1)

创建一个功能

CREATE FUNCTION [dbo].[getRandomName](@gen varchar(10))
RETURNS @name varchar(50)

AS
BEGIN

   SELECT TOP 1 @name = name FROM table WHERE gender=@gen ORDER BY newid()
END

然后,只需将@gen传递给像这样的函数

select dbo.getRandomName('male')

或者,像这样更新很多行:

UPDATE myNewTable 
   SET newName=dbo.getRandomName('male')
WHERE gender='male'

答案 5 :(得分:0)

在SQL Server中,获取“随机”的最佳方法是使用newid()。您可以按此排序以获取排序列表。

如果每个性别有五个名称,则可以使用CTE存储它们。然后插入看起来像:

with names as (
      select 'M' as gender, 'Alexander' as name union all
      select 'M', 'Burt' union all
      select 'M', 'Christopher' union all
      select 'M', 'Daniel' union all
      select 'M', 'Eric' union all
      select 'F', 'Alexandra' union all
      select 'F', 'Bertha' union all
      select 'F', 'Christine' union all
      select 'F', 'Daniela' union all
      select 'F', 'Erica'
)
insert into table(name)
    select top 1 name
    from names
    where gender = @MyGender
    order by newid();

答案 6 :(得分:0)

select top 1 name from RandomNames 
where gender = 'M' order by newid()

Sample fiddle