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