【问题标题】:how to insert random integers to a particular column in PostgreSQL如何将随机整数插入 PostgreSQL 中的特定列
【发布时间】:2016-12-15 11:06:22
【问题描述】:

我在 PostgreSQL 中有一个现有的表“public.trip_info”,我在其中添加了一个新列“zone”,现在我想在列中插入 1 到 80 之间的随机整数。所以我知道如何生成随机数在 PostgreSQL 中为 1 到 80。

SELECT floor(random() * 80 + 1)::int;

如何将它插入到所有行的列中。 我是 SQL 脚本的新手。

【问题讨论】:

    标签: sql database postgresql


    【解决方案1】:

    这个怎么样?

    update public.trip_info
        set zone = floor(random() * 80 + 1)::int;
    

    【讨论】:

    • 如何生成一个范围内的随机数 例如(40,80) update public.trip_info set zone = floor(random() * 80 + 40)::int;这有时也少于 40
    • @RKR。 . .该问题专门针对从 1 到 80 的数字。如果您还有其他问题,请作为问题而不是在评论中提问。
    【解决方案2】:

    我已经有一段时间没有用 postgres 编写了。但是,所有基于 SQL 的数据库的想法几乎相同。

    为了将随机值插入新列,您必须对表执行 UPDATE。

    下面是一个使用 MySQL 的例子:

    -- 初始创建和插入

    mysql> create table t1(
        -> name varchar(20)
        -> ); 
    Query OK, 0 rows affected (0.20 sec)
    
    mysql> insert into t1 values('blah blah blah'), ('aaa'); 
    Query OK, 2 rows affected (0.04 sec)
    Records: 2  Duplicates: 0  Warnings: 0
    
    mysql> select * from t1; 
    +----------------+
    | name           |
    +----------------+
    | blah blah blah |
    | aaa            |
    +----------------+
    2 rows in set (0.00 sec)
    

    -- 修改表

    mysql> alter table t1 add zone int not null;
    Query OK, 0 rows affected (0.28 sec)
    Records: 0  Duplicates: 0  Warnings: 0
    
    mysql> select * from t1; 
    +----------------+------+
    | name           | zone |
    +----------------+------+
    | blah blah blah |    0 |
    | aaa            |    0 |
    +----------------+------+
    2 rows in set (0.00 sec)
    

    -- 更新特定列

    mysql> UPDATE t1 SET zone=floor(rand()*(80+1)) WHERE name='aaa';
    Query OK, 1 row affected (0.11 sec)
    Rows matched: 1  Changed: 1  Warnings: 0
    
    mysql> select * from t1; 
    +----------------+------+
    | name           | zone |
    +----------------+------+
    | blah blah blah |    0 |
    | aaa            |    6 |
    +----------------+------+
    2 rows in set (0.00 sec)
    

    -- 一次更新整个表

    mysql> UPDATE t1 SET zone=floor(rand()*(80+1));
    Query OK, 2 rows affected (0.04 sec)
    Rows matched: 2  Changed: 2  Warnings: 0
    
    mysql> select * from t1; 
    +----------------+------+
    | name           | zone |
    +----------------+------+
    | blah blah blah |   67 |
    | aaa            |   76 |
    +----------------+------+
    2 rows in set (0.00 sec)
    

    希望有帮助

    【讨论】:

    • 感谢您的详细解释。它确实有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-10
    相关资源
    最近更新 更多