sql - 如何在 postgresql 中更新表

标签 sql postgresql

我有一个格式如下的表格:

time                  year   month   day   hour   area   state1    state3 
2015-04-01 00:00:00   2015     4      1      0      1     100        300
2015-04-01 00:00:00   2015     4      1      0      2     300        300
2015-04-01 00:00:00   2015     4      1      0      3     500        600
2015-04-01 01:00:00   2015     4      1      0      1     600        900
2015-04-01 01:00:00   2015     4      1      0      2     100        300
2015-04-01 01:00:00   2015     4      1      0      3     100        600 
2015-04-01 02:00:00   2015     4      1      0      2     900        300
2015-04-01 02:00:00   2015     4      1      0      3     300        900
2015-04-01 02:00:00   2015     4      1      0      1     100        300
.......................
...........
........
2015-04-30 23:00:00   2015     4      30      23    3     100        300

问题是在 2015-04-10 00:00:00 之后我的所有记录在 state1 和 state3 中都是 0。所以我想用 150 到 300 之间的随机数更新它们。

我有一个返回随机数的函数。

SELECT random_between(1,100)
FROM generate_series(1,5);

如何使用我的函数在 2015-04-10 00:00:00 之后更新 state1 和 state3。感谢任何帮助。

最佳答案

以以下 session 为例。这是您尝试做的一个非常简单的示例,也许它可以适应您的情况。我使用了直接转换和函数:

> createdb test
> psql -d test
psql (9.4.9)
Type "help" for help.

test=# create table mytest(id integer, cola integer,colb integer);
CREATE TABLE
test=# select * from mytest;
 id | cola | colb 
----+------+------
(0 rows)

test=# insert into mytest values(1,0,0);
INSERT 0 1
test=# insert into mytest values(2,0,0);
INSERT 0 1
test=# insert into mytest values(3,0,0);
INSERT 0 1
test=# insert into mytest values(4,0,0);
INSERT 0 1
test=# select * from mytest;
 id | cola | colb 
----+------+------
  1 |    0 |    0
  2 |    0 |    0
  3 |    0 |    0
  4 |    0 |    0
(4 rows)

test=# update mytest set cola = cast(((random()*150)+150) as Integer) where id >2;
UPDATE 2
test=# select * from mytest;
 id | cola | colb 
----+------+------
  1 |    0 |    0
  2 |    0 |    0
  3 |  178 |    0
  4 |  198 |    0
(4 rows)

test=# create function myrand()
test-# returns integer as $i$
test$# declare i integer;
test$# begin
test$# return cast(((random()*150)+150) as Integer);
test$# end; 
test$# $i$ language plpgsql;
CREATE FUNCTION

test=# update mytest set colb = myrand() where id >2;
UPDATE 2
test=# select * from mytest;
 id | cola | colb 
----+------+------
  1 |    0 |    0
  2 |    0 |    0
  3 |  178 |  201
  4 |  198 |  291
(4 rows)

关于sql - 如何在 postgresql 中更新表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41789655/

相关文章:

sql - PostgreSQL JsonB 根据对象属性查询 JSON 数组中的对象

mysql - 从单个表中仅在一行中添加多行

mysql - 带加密的存储过程始终返回 null

与上一行的mysql百分比差异

mysql - sql查询是什么?

html - 解析 postgresql 查询中的 html 字段

按两列分组的Mysql问题

postgresql - 如何为基于复合类型的 Postgres DOMAIN 定义 CHECK 约束

c - 使用c语言在postgres数据库中插入modbus值

ruby-on-rails - Rails 查询中的自定义排序