SQLParity

SQLParity — SQL tools that run in your browser

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 DESC
segmentrowsavg_total
enterprise1,28448,210.55
smb9,6173,905.20
unknown4121,120.00

Bulk 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

+ signup_channel varchar~ total_spend int → bigint− legacy_ref varchar= customer_id varchar

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'

! the filter reads every partitiona column inside a function cannot prune

Dialect converter

Move a query between engines, with an explicit list of what it refused to guess at.

SQL Server to PostgreSQL

SQL Server

SELECT TOP 10 [name], LEN([note]) FROM [sales] WHERE [note] = 'O''Brien'

PostgreSQL

SELECT "name", LENGTH(RTRIM("note")) FROM "sales" WHERE "note" = 'O''Brien' LIMIT 10

Your 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.

Open the builder
0 values · apostrophes doubled ('')

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.

"id"
How a name is quoted
''
How an apostrophe is escaped
\\
Backslashes must be doubled

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"''