PostgreSQL

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

Leave a Reply

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.