SQL — generátor náhodných dat

Zpět na blog

SQL  — generátor náhodných dat

SQL RANDOM MD5 UUID NEWID RANDOMBLOB generate_series

Vyzkoušejte si SQL hacky, díky kterým můžete snadno generovat testovací data.

Následující SQL dotaz vrátí 100 řádků. Každý řádek bude mít 3 sloupce - číslo (integer, tedy celé číslo), řetězec (libovolné znaky velkými písmeny nebo číslice) a datum (náhodné datum v minulosti, bez času).

Ukážeme si, jak taková data vygenerovat v různých databázích. Konkrétně PostgreSQL, MySQL, Microsoft SQL ServerSQLite.

V PostgreSQL využijeme funkci generate_series, díky které je generátor triviální záležitostí na pár řádků. Pro ostatní databáze použijeme rekurzivní Common Table Expressions (CTE).

PostgreSQL

SELECT
  CAST(RANDOM()*1000+1 AS INT) AS "číslo",
  UPPER(LEFT(MD5(RANDOM()::text),10)) AS "řetězec",
  CURRENT_DATE - CAST(RANDOM()*1000+1 AS INT) AS "datum"
FROM generate_series(1,100);
číslo   řetězec     datum
------------------------------
911     3F1B6A3F84  2019-03-16
939     8DBDED88C7  2020-10-05
683     FE48DE864E  2018-03-16
...     ..........  ..........

## MySQL

WITH RECURSIVE generate_series(value) AS (
  SELECT 1
  UNION ALL
  SELECT value + 1 FROM generate_series
   WHERE value + 1 <= 100
)
SELECT 
  FLOOR(RAND()*1000+1) AS "číslo",
  UPPER(LEFT(REPLACE(UUID(),'-',''),10)) AS "řetězec",
  DATE_ADD(CURRENT_DATE, INTERVAL FLOOR(RAND()*-1000+1) DAY ) AS "datum"
FROM generate_series;
číslo   řetězec     datum
------------------------------
376     EFD3AE5B1E  2019-02-01
85      EFD3AEAC1E  2019-06-29
221     EFD3AEB91E  2019-02-27
...     ..........  ..........

SQL Server

WITH generate_series(value) AS (
  SELECT 1
  UNION ALL
  SELECT value + 1 FROM generate_series
   WHERE value + 1 <= 100
)
SELECT 
  CAST(CRYPT_GEN_RANDOM(1) As INT) AS "číslo",
  LEFT(REPLACE(NEWID(),'-',''),10) AS "řetězec",
  DATEADD(day, CAST(CRYPT_GEN_RANDOM(1) As INT)*-1, CONVERT (DATE, CURRENT_TIMESTAMP)) AS "datum"
FROM generate_series;
číslo   řetězec     datum
------------------------------
182     5881FAF0FE  2020-09-23
113     F4034A7305  2020-06-21
179     723F9BAADD  2020-07-27
...     ..........  ..........

SQLite

WITH RECURSIVE generate_series(value) AS (
  SELECT 1
  UNION ALL
  SELECT value + 1 FROM generate_series
   WHERE value + 1 <= 100
)
SELECT 
  ABS(RANDOM()%1000) AS "číslo",
  HEX(RANDOMBLOB(5)) AS "řetězec",
  DATE(DATE(), '-'||ABS(RANDOM()%1000)||' day') AS "datum"
FROM generate_series;
číslo   řetězec     datum
------------------------------
573     D59E7BA651  2019-08-19
81      298EAEAE83  2018-07-16
215     1D585B476F  2020-04-22
...     ..........  ..........


Určitě existují i další způsoby generování dat pomocí SQL. Pokud se o ně bude chtít podělit, napište nám a my je rádi zveřejníme.


Líbil se vám článek? Sdílejte ho s ostatními

nebo nám napište něco hezkého. Děkujeme!

Zpět na blog

Python pro každý den

Jak si užít Python a nezabloudit v kódu

Zobrazit knihu

Úvod do jazyka R

Naučte se efektivní datovou analýzu.

Zobrazit kurz

Vizualizace pro analytiky

Matplotlib, Pandas a Seaborn. Naučte se vizualizovat a prezentovat data v Pythonu.

Zobrazit kurz

Hledáme další autory

Publikujte na Lovely Blogu a inspirujte ostatní! Sdílením svých znalosti si budujete osobní značku.

Kontaktujte nás

Odběr novinek

Novinky, návody a tipy přímo do vašeho emailu.

Copyright © 2018-2024, Colorbee, s.r.o.

Designed by grafikli.cz in Prague.