> For the complete documentation index, see [llms.txt](https://docs.aporia.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.aporia.com/api-reference/custom-segment-syntax.md).

# Custom Segment Syntax

In Aporia, [custom segments](/core-concepts/tracking-data-segments.md) are defined using SQL-based syntax.

The definition is written as a condition that will be passed to a WHERE clause. The condition should be based only on fields within your model version schema.

The following SQL operators are supported:

```sql
>, <, <=, >=, !=, &, |, =, is, not, or, and
```

{% hint style="warning" %}
Categorical fields are ingested as strings.\
If your segment includes a comparison of a categorical field and a constant value, remember to quote the constant value.
{% endhint %}

<figure><img src="/files/vAOJzWQ8aAssJ5wPUEY9" alt=""><figcaption><p>Custom Segments Creation</p></figcaption></figure>

## Examples

1. Assume we have a numeric field "age" and a boolean field "is\_customer" in our schema, we can create a segment based on these fields as follows:

```sql
--Segment of customers above age 23
age > 23 and is_customer = True
```

2. Assume we have a categorical field "partner\_type" and categorical field "deal\_step" in our schema, we can create a segment based on these fields as follows:

```sql
--Segment of all 'Gold' partners with missing deal stage
partner_type = 'Gold' and deal_stage is null
```

3. Assume we have a categorical field "region\_code" in our schema, we can create a segment based on this field as follows:

```sql
--Segment of all data with region_code different than '123'
region_code != '123'
```
