使用sql从列表中插入随机字符串

时间:2019-04-09 16:07:29

标签: sql oracle

我创建了一个像这样的表:region(id,name),我想在该表中插入一些行,应从['east','west']之类的列表中随机选择名称。我可以吗?

2 个答案:

答案 0 :(得分:0)

使用...插入10个随机行...

Oracle:

INSERT INTO region(name)
SELECT rndm.name 
  FROM (SELECT 1 n
          FROM dual
       CONNECT BY LEVEL <= 365
     ) gen
 CROSS 
  JOIN (SELECT 'west' name FROM dual
         UNION ALL
        SELECT 'east' FROM dual
         UNION ALL
        SELECT 'north' FROM dual
     ) rndm
 WHERE rownum <= 10
 ORDER BY DBMS_RANDOM.VALUE

SQL Server:

INSERT INTO region (name)
SELECT TOP 10 rndm.name
  FROM sys.all_objects a1
 CROSS
  JOIN (VALUES ('east'),
               ('west')) rndm(name)
 ORDER BY CHECKSUM(NEWID())

MySQL:

INSERT INTO region (name)
SELECT rndm.name
  FROM information_schema.columns v
 CROSS
  JOIN (SELECT 'east' as name UNION ALL
        SELECT 'west') rndm
 ORDER BY RAND()
 LIMIT 10

Postgres:

 INSERT INTO region(NAME)
 SELECT unnest(ARRAY['west','east'])
   FROM generate_series(1, 100)
  ORDER BY random()
  LIMIT 10

答案 1 :(得分:0)

这是一个Oracle解决方案。第一个子查询使用Oracle的CONNECT BY语法生成1到3之间的10个随机整数。第二个子查询将区域名称与1到3之间的数字关联。在主查询中将它们联接起来以填充表:

insert into region (id, name)
with rnd as (
     select level as lvl, round(DBMS_RANDOM.VALUE(0.5,3.4999999999), 0) as rnd
     from dual
     connect by level <= 10
 ) , regn as (  
    select 1 as rno, 'west' as rname from dual union all
    select 2 as rno, 'east' as rname from dual union all
    select 3 as rno, 'north' as rname from dual
)
select rnd.lvl
       , regn.rname
from rnd
     join regn on rnd.rnd = regn.rno
/