Ir para o conteúdo
ou

Software livre Brasil

 Voltar a SAVEPOINT
Tela cheia

Gerando valores aleatórios no PostgreSQL, ou quase…

26 de Novembro de 2015, 11:02 , por Savepoint - 0sem comentários ainda | Ninguém está seguindo este artigo ainda.
Visualizado 3 vezes

Este artigo foi escrito por telles

Em homenagem à Megasena acumulada que eu não ganhei… uma pequena brincadeira no PostgreSQL, gerando números, datas, caracteres e pedaços de textos

--Um número randomico de 0 a 1
=# SELECT random() n;
 n 
-------------------
 0.210320219863206

-- Um número inteiro de 0 a 100
=# SELECT round(random() * 100) n;
 n 
----
 32

--Uma data entre hoje e um ano no futuro
=# SELECT current_date + round(random()*365)::int * '1 day'::interval AS data;
 data 
---------------------
 2016-05-23 00:00:00

-- Um caractere ASCII (32 a 126)
=# SELECT chr((round(random() * 94) + 32)::int);
 chr 
-----
 v

-- 20 caracteres aleatorios
=# WITH RECURSIVE t(c, v) AS (
 SELECT chr((round(random() * 94) + 32)::int), chr((round(random() * 94) + 32)::int)
 UNION ALL
 SELECT chr((round(random() * 94) + 32)::int), v || c FROM t
)
SELECT length(v), v FROM t OFFSET 19 LIMIT 1;
 length | v 
--------+----------------------
 20 | #>^h<}{ThUVMqFmnnKp@

-- Extraindo um pedaço de um texto
--
=# CREATE TABLE t (t varchar);
CREATE TABLE

=# INSERT INTO t VALUES( $v$Aos meus 12 anos, quando eu dava meus primeiros passos na informática e gravava meus primeiros programas em fita cassete, eu achava que trabalhar com informática seria algo glorioso. Nós eliminariamos o trabalho repetitivo das pessoas automatizando tarefas chatas e tediosas. Afinal, não é para isso que serve o computador: realizar rapidamente tarefas repetitivas!$v$);
INSERT 0 1

--Extraindo 10 caracteres do texto
SELECT substr(t,round(random()*355)::int,10) FROM t;

--Contanto o total de caracteres
=# SELECT length(t) from t;
 length 
--------
 365

--Selecionando o tamanho da string
=# SELECT l, round(random()*l)::int q
 FROM (SELECT length(t) l, t FROM t) t2;
 l | q 
-----+----
 365 | 45

--Extraindo uma string de tamanho variável
=# SELECT l, q, substr(t,round(random()*(l-q))::int,q)
 FROM (SELECT l, round(random()*l)::int q, t
 FROM (SELECT length(t) l, t FROM t) t2) t3;
 l | q | substr 
-----+----+---------------------------------------------------
 365 | 49 | fita cassete, eu achava que trabalhar com inform

O artigo Gerando valores aleatórios no PostgreSQL, ou quase… apareceu primeiro em Savepoint.


Fonte: http://savepoint.blog.br/gerando-valores-aleatorios-ou-quase/

0sem comentários ainda

Enviar um comentário

Os campos são obrigatórios.

Se você é um usuário registrado, pode se identificar e ser reconhecido automaticamente.