SQL — generátor náhodných dat

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.

Jste z oboru a chcete něco zajímavého sdělit našemu publiku?

LovelyData

Nenechávejte si to pro sebe!

Určitě máte co říct a byla by škoda, kdyby o tom nikdo nevěděl. Protože naši čtenáři chtějí být informováni o všem, co vytváří budoucnost.

Kontaktujte nás. Těšíme se na spolupráci.

Odběr novinek

Novinky, kurzy a exkluzivní slevy. Získejte informace jako první. Stačí jen zadat e-mail. Je to zdarma a odhlásit se můžete kdykoliv.

© Colorbee, s.r.o.

Design by grafikli.cz

Používáme cookies pro lepší uživatelský zážitek. Používáním webu s tím vyjadřujete souhlas a zároveň potvrzujete, že jste se seznámil/a s Prohlášením o ochraně osobních údajů.

Fotografie: lektoři, grafikli.cz, icons8.com