Seven SQL tools that never see your data
Built around one job: proving a migration copied every column correctly, without handing your table definitions to anyone. Everything runs in this tab.
SQL scratchpad
Drop in a CSV or Parquet file and query it with real SQL. DuckDB runs inside the tab, so the file is never uploaded.
orders.csv — read off your disk, not uploaded
SELECT segment, count(*) AS rows, avg(total) AS avg_total
FROM orders
WHERE created_at >= DATE '2026-01-01'
GROUP BY segment
ORDER BY rows DESCBulk query generator
One template plus a pasted column list becomes one validation query per field, with the right null placeholder for each data type.
From one CREATE TABLE, 412 columns
-- 1 of 412, one per column in the CREATE TABLE
SELECT 'customer_segment' AS field, count(*) AS mismatches
FROM input_db a
JOIN output_db b ON a.customer_id = b.customer_id
WHERE coalesce(a.customer_segment, '~') <> coalesce(b.customer_segment, '~')Schema diff
Compare the old and new definition, then check only what actually changed.
old.sql against new.sql
IN list builder
A column of values becomes a correctly quoted clause — apostrophes, backslashes and leading zeros included.
O'Brien Holdings · 007 · Müller GmbH
IN (
'O''Brien Holdings',
'007',
'Müller GmbH'
)SQL formatter
Sixteen dialects, leading or trailing commas, and a syntax check as you type.
select a.customer_id,a.customer_segment from sales a where a.dt=date '2026-01-01'
SELECT
a.customer_id
, a.customer_segment
FROM sales a
WHERE a.dt = DATE '2026-01-01'Query optimizer
Nine checks for the shapes that scan more than they need to, each with the reason it costs something.
WHERE date(created_at) = '2026-01-01'
Dialect converter
Move a query between engines, with an explicit list of what it refused to guess at.
SELECT TOP 10 [name], LEN([note]) FROM [sales]
SELECT "name", LENGTH("note")
FROM "sales"
LIMIT 10Your schema never leaves this tab.
No account. No upload. No server to trust. Type in the box and watch the counter below it stay at zero — the claim is measured, not asserted.
Sixteen dialects that disagree about quoting
The riskiest thing any of these tools does is quote a string. A wrong escape does not throw — it runs, and returns the wrong rows. So every dialect carries its own rules, and every rule is covered by tests.
PostgreSQL
"name" · ''
MySQL
`name` · '' · \\
SQLite
"name" · ''
SQL Server (T-SQL)
[name] · ''
Oracle
"name" · ''
MariaDB
`name` · '' · \\
Snowflake
"name" · '' · \\
Google BigQuery
`name` · \' · \\
Amazon Redshift
"name" · '' · \\
Amazon Athena / Trino
"name" · ''
Apache Spark SQL
`name` · \' · \\
Apache Hive
`name` · \' · \\
ClickHouse
`name` · '' · \\
DuckDB
"name" · ''
IBM Db2
"name" · ''
Standard SQL
"name" · ''
identifier quoting · how an apostrophe is escaped · whether a backslash must be doubled