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 Server a SQLite.
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.