# Between Symmetric

PostgreSQL's `between` construct allows you to make a comparison _between_
two values (numbers, timestamps, etc.).

```sql
> select *
  from generate_series(1,10) as numbers(a)
  where numbers.a between 3 and 6;
 a
---
 3
 4
 5
 6
```

If you supply an empty range by using the larger of the two values first, an
empty set will result.

```sql
> select *
  from generate_series(1,10) as numbers(a)
  where numbers.a between 6 and 3;
 a
---
```

Tacking `symmetric` onto the `between` construct is one way to avoid this
issue.

```sql
> select *
  from generate_series(1,10) as numbers(a)
  where numbers.a between symmetric 6 and 3;
 a
---
 3
 4
 5
 6
```

> BETWEEN SYMMETRIC is the same as BETWEEN except there is no requirement
> that the argument to the left of AND be less than or equal to the argument
> on the right. If it is not, those two arguments are automatically swapped,
> so that a nonempty range is always implied.

[source](https://www.postgresql.org/docs/current/functions-comparison.html#:~:text=BETWEEN%20SYMMETRIC%20is%20like%20BETWEEN,nonempty%20range%20is%20always%20implied.)
