如何解决使用 PostgreSQL 列表中的值随机填充表列
我想用以下值随机填充表中的一列: 可用、暂停、部分首付、已售/不可用、代币
我尝试使用以下命令,但它使用它获得的第一个值填充整个列。
update mytable
set sold_status = (select (array['Available','On Hold','Partial Downpayment','Sold/Unavailable','Token Recieved'])[floor(random() * 5 + 1)])
我知道如何使用编程语言实现这一点,但我更喜欢使用 Postgresql 查询来实现这一点。
解决方法
Postgres 认为它只运行一次 random()
对您有帮助 -- 忘记了 random()
是一个可变函数。
您可以使用 case
解决此问题:
update mytable
set sold_status = (case (random()*5)::int when 0 then 'Available' when 1 then 'On Hold' when 2 then 'Partial Downpayment' when 3 then 'Sold/Unavailable' when 4 then 'Token Recieved' end);
Here 是一个 dbfiddle。
,虽然 PostgreSQL 跟踪简单表达式的波动性,但它不会跟踪不包含对外部查询的引用的子选择的波动性。您可以通过引入对外部查询的人工引用来解决此问题,但在您的情况下,您首先不需要子选择,因此只需摆脱它。
update mytable
set sold_status = (array[
'Available','On Hold','Partial Downpayment','Sold/Unavailable','Token Recieved'
]) [floor(random() * 5 + 1)];
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。