Gerando valores aleatórios no PostgreSQL, ou quase…

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

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

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

--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

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s