我有一个以下格式的表格:
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。非常感谢。
答案 0 :(得分:2)
以下面的会话为例。这是你想要做的一个非常简单的例子,也许它可以适应你的情况。我使用了直接演员和功能:
> 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)