add
remove
split
language
chart
show hidden
hide
db<>fiddle
Db2
DocumentDB
DuckDB
Firebird
MariaDB
MySQL
Oracle
Postgres
SQL Server
SQLite
TimescaleDB
YugabyteDB
11.1
11.5
12.1
0.114 (MongoDB 7.0)
0.116 (MongoDB 7.0)
1.4 LTS
3.0
4.0
5.0
10.2
10.3
10.4
10.5
10.6
10.7
10.8
10.9
10.11
11.4
11.8
12.3
5.5
5.6
5.7
8.0
8.4
9.7
11g Release 2
18c
21c
23ai
23c
26ai
8.4
9.3
9.4
9.5
9.6
10
11
12
13
14
15
16
17
18
19 beta 3
2012
2014
2016
2017
2017 (Linux)
2019
2019 (Linux)
2022
2025
3.8
3.16
3.27
3.39
3.45
3.53
2.11
2.14
2.28
2.6
2.8
2.18
2024.2 LTS
2025.2 LTS
no sample DB
no sample DB
no sample DB
no sample DB
no sample DB
no sample DB
no sample DB
no sample DB
no sample DB
no sample DB
no sample DB
no sample DB
no sample DB
no sample DB
no sample DB
no sample DB
no sample DB
no sample DB
no sample DB
no sample DB
no sample DB
no sample DB
no sample DB
no sample DB
no sample DB
Sakila
no sample DB
no sample DB
no sample DB
no sample DB
no sample DB
no sample DB
no sample DB
no sample DB
no sample DB
no sample DB
no sample DB
no sample DB
no sample DB
no sample DB
no sample DB
no sample DB
no sample DB
no sample DB
no sample DB
no sample DB
no sample DB
no sample DB
no sample DB
no sample DB
no sample DB
no sample DB
no sample DB
no sample DB
no sample DB
AdventureWorks
no sample DB
no sample DB
AdventureWorks
no sample DB
AdventureWorks
no sample DB
no sample DB
no sample DB
no sample DB
no sample DB
no sample DB
no sample DB
no sample DB
no sample DB
no sample DB
no sample DB
no sample DB
no sample DB
no sample DB
run
abort
markdown
clear
donate
feedback
about
By using db<>fiddle, you agree to license everything you submit by
Creative Commons CC0
.
CREATE TABLE data ( data_id serial PRIMARY KEY , day date NOT NULL -- helps a bit , values numeric[] ); -- random dates over 15 years. Roughly 30 dates per day, 160k rows INSERT INTO data (day, values) SELECT '2000-01-01'::date + (random() * 5500)::int , ('{123' || repeat(',456', (random() * 10)::int) || '}')::numeric[] -- dummy of varying size FROM generate_series(1, 160000) g; CREATE INDEX data_day_idx ON data (day);
CREATE TABLE
INSERT 0 160000
CREATE INDEX
-- rCTE WITH RECURSIVE cte AS ( ( SELECT day FROM data WHERE day >= '2010-01-01' ORDER BY 1 LIMIT 1 ) UNION ALL SELECT (SELECT day FROM data WHERE day > c.day AND day < '2011-01-01' ORDER BY 1 LIMIT 1) FROM cte c WHERE day IS NOT NULL ) SELECT count(*) AS ct FROM cte WHERE day IS NOT NULL;
ct
365
SELECT 1
-- EXISTS SELECT count(*) AS ct FROM generate_series(timestamp '2010-01-01' , timestamp '2010-12-31' , interval '1 day') AS d(day) WHERE EXISTS (SELECT FROM data WHERE day = d.day::date);
ct
365
SELECT 1