SQL reference
This page documents the R2 SQL syntax based on the currently supported grammar in public beta.
SELECT column_listFROM table_nameWHERE conditions --optional[ORDER BY column_name [DESC | ASC]][LIMIT number]SELECT column_specification [, column_specification, ...]- Column name: 
column_name - All columns: 
* 
SELECT * FROM table_nameSELECT user_id FROM table_nameSELECT user_id, timestamp, status FROM table_nameSELECT timestamp, user_id, response_code FROM table_nameSELECT * FROM table_nameSELECT * WHERE condition [AND|OR condition ...]column_name IS NULLcolumn_name IS NOT NULL
column_name BETWEEN value' AND 'valuecolumn_name = valuecolumn_name >= valuecolumn_name > valuecolumn_name <= valuecolumn_name < valuecolumn_name != valuecolumn_name LIKE 'value%'
AND- Logical ANDOR- Logical OR
- integer - Whole numbers
 - float - Decimal numbers
 - string - Text values (quoted)
 - timestamp - RFC3339 format (
'YYYY-DD-MMT-HH:MM:SSZ') - date - Date32/Data64 expressed as a string (
'YYYY-MM-DD') - boolean - Explicitly valued (true, false)
 
SELECT * FROM table_name WHERE timestamp BETWEEN '2025-09-24T01:00:00Z' AND '2025-09-25T01:00:00Z'SELECT * FROM table_name WHERE status = 200SELECT * FROM table_name WHERE response_time > 1000SELECT * FROM table_name WHERE user_id IS NOT NULLSELECT * FROM table_name WHERE method = 'GET' AND status >= 200 AND status < 300SELECT * FROM table_name WHERE (status = 404 OR status = 500) AND timestamp > '2024-01-01'--Note: ORDER BY only supports ordering by the partition keyORDER BY partition_key [DESC]- ASC: Ascending order
 - DESC: Descending order
 - Default: DESC on all columns of the partition key
 - Can contain any columns from the partition key
 
SELECT * FROM table_name WHERE ... ORDER BY paetition_key_ASELECT * FROM table_name WHERE ... ORDER BY partition_key_B DESCSELECT * FROM table_name WHERE ... ORDER BY partitionKey_A ASCLIMIT number- Range: 1 to 10,000
 - Type: Integer only
 - Default: 500
 
SELECT * FROM table_name WHERE ... LIMIT 100SELECT *FROM http_requestsWHERE timestamp BETWEEN '2025-09-24T01:00:00Z' AND '2025-09-25T01:00:00Z'LIMIT 100SELECT user_id, timestamp, status, response_timeFROM access_logsWHERE status >= 400 AND response_time > 5000ORDER BY response_time DESCLIMIT 50SELECT timestamp, method, status, user_agentFROM http_requestsWHERE (method = 'POST' OR method = 'PUT')  AND status BETWEEN 200 AND 299  AND user_agent IS NOT NULLORDER BY timestamp DESCLIMIT 1000SELECT user_id, session_id, date_columnFROM user_eventsWHERE session_id IS NOT NULL  AND date_column >= '2024-01-01'ORDER BY timestampLIMIT 500| Type | Description | Example Values | 
|---|---|---|
integer | Whole numbers | 1, 42, -10, 0 | 
float | Decimal numbers | 1.5, 3.14, -2.7, 0.0 | 
string | Text values | 'hello', 'GET', '2024-01-01' | 
boolean | Boolean values | true, false | 
timestamp | RFC3339 | '2025-09-24T01:00:00Z' | 
date | 'YYYY-MM-DD' | '2025-09-24' | 
-- Integer comparisonsSELECT * FROM table_name WHERE status = 200SELECT * FROM table_name WHERE response_time > 1000
-- Float comparisonsSELECT * FROM table_name WHERE cpu_usage >= 85.5SELECT * FROM table_name WHERE memory_ratio < 0.8
-- String comparisonsSELECT * FROM table_name WHERE method = 'POST'SELECT * FROM table_name WHERE user_agent != 'bot'SELECT * FROM table_name WHERE country_code = 'US'- Comparison operators: 
=,!=,<,<=,>,>=,LIKE,BETWEEN,IS NULL,IS NOT NULL - AND (higher precedence)
 - OR (lower precedence)
 
Use parentheses to override default precedence:
SELECT * FROM table_name WHERE (status = 404 OR status = 500) AND method = 'GET'Was this helpful?
- Resources
 - API
 - New to Cloudflare?
 - Directory
 - Sponsorships
 - Open Source
 
- Support
 - Help Center
 - System Status
 - Compliance
 - GDPR
 
- Company
 - cloudflare.com
 - Our team
 - Careers
 
- © 2025 Cloudflare, Inc.
 - Privacy Policy
 - Terms of Use
 - Report Security Issues
 - Trademark