blob: 225a1def47f4e32c1bb5fb86f65c99f393c8c86a [file] [view]
---
{
"title": "POSITION",
"language": "en",
"description": "The POSITION function is used to find the position of a substring in a main string, with positions counting from 1."
}
---
## Description
The POSITION function is used to find the position of a substring in a main string, with positions counting from 1.
## Syntax
```sql
POSITION(<substr> IN <str>)
POSITION(<substr>, <str> [, <pos>])
```
## Parameters
| Parameter | Description |
| -------- | ----------------------------------------------- |
| `substr` | The substring to search for. Type: VARCHAR |
| `str` | The main string to search within. Type: VARCHAR |
| `pos` | Optional parameter specifying the starting position (from 1). If specified, search starts from this position |
## Return Value
Returns INT type, representing the position of the first occurrence of the substring in the main string.
Search rules:
- Returns position index starting from 1
- If substring is not found, returns 0
- If a starting position is specified, searches from that position
- Search is case-sensitive
Special cases:
- If any parameter is NULL, returns NULL
- If substring is an empty string, returns 1 (or the starting position)
- If starting position exceeds string length, returns 0
- If starting position is negative, searches from the beginning of the string
## Examples
1. Basic search (two syntax forms)
```sql
SELECT POSITION('bar' IN 'foobarbar'), POSITION('bar', 'foobarbar');
```
```text
+----------------------------------+--------------------------------+
| POSITION('bar' IN 'foobarbar') | POSITION('bar', 'foobarbar') |
+----------------------------------+--------------------------------+
| 4 | 4 |
+----------------------------------+--------------------------------+
```
2. Search with starting position
```sql
SELECT POSITION('bar', 'foobarbar', 5), POSITION('xbar', 'foobar');
```
```text
+-----------------------------------+----------------------------------+
| POSITION('bar', 'foobarbar', 5) | POSITION('xbar', 'foobar') |
+-----------------------------------+----------------------------------+
| 7 | 0 |
+-----------------------------------+----------------------------------+
```
3. NULL value handling
```sql
SELECT POSITION('test' IN NULL), POSITION(NULL, 'test');
```
```text
+--------------------------+------------------------+
| POSITION('test' IN NULL) | POSITION(NULL, 'test') |
+--------------------------+------------------------+
| NULL | NULL |
+--------------------------+------------------------+
```
4. Empty string handling
```sql
SELECT POSITION('' IN 'hello'), POSITION('world' IN '');
```
```text
+------------------------+------------------------+
| POSITION('' IN 'hello') | POSITION('world' IN '') |
+------------------------+------------------------+
| 1 | 0 |
+------------------------+------------------------+
```
5. Case-sensitive search
```sql
SELECT POSITION('World' IN 'Hello World'), POSITION('world' IN 'Hello World');
```
```text
+----------------------------------+----------------------------------+
| POSITION('World' IN 'Hello World') | POSITION('world' IN 'Hello World') |
+----------------------------------+----------------------------------+
| 7 | 0 |
+----------------------------------+----------------------------------+
```
6. Search from different positions
```sql
SELECT POSITION('a', 'banana', 1), POSITION('a', 'banana', 3);
```
```text
+-----------------------------+-----------------------------+
| POSITION('a', 'banana', 1) | POSITION('a', 'banana', 3) |
+-----------------------------+-----------------------------+
| 2 | 4 |
+-----------------------------+-----------------------------+
```
7. UTF-8 multi-byte characters
```sql
SELECT POSITION('ḍḍumai' IN 'ṭṛì ḍḍumai hello'), POSITION('hello', 'ṭṛì ḍḍumai hello', 8);
```
```text
+-------------------------------------------------------+---------------------------------------------------+
| POSITION('ḍḍumai' IN 'ṭṛì ḍḍumai hello') | POSITION('hello', 'ṭṛì ḍḍumai hello', 8) |
+-------------------------------------------------------+---------------------------------------------------+
| 5 | 12 |
+-------------------------------------------------------+---------------------------------------------------+
```
8. Special character search
```sql
SELECT POSITION('@' IN 'user@domain.com'), POSITION('.', 'user@domain.com', 10);
```
```text
+----------------------------------+--------------------------------------+
| POSITION('@' IN 'user@domain.com') | POSITION('.', 'user@domain.com', 10) |
+----------------------------------+--------------------------------------+
| 5 | 12 |
+----------------------------------+--------------------------------------+
```
9. Starting position beyond bounds
```sql
SELECT POSITION('test', 'hello world', 20), POSITION('test', 'hello world', 0);
```
```text
+--------------------------------------+-------------------------------------+
| POSITION('test', 'hello world', 20) | POSITION('test', 'hello world', 0) |
+--------------------------------------+-------------------------------------+
| 0 | 0 |
+--------------------------------------+-------------------------------------+
```
10. Search in numbers and symbols
```sql
SELECT POSITION('123' IN '456123789'), POSITION('-', 'phone: 123-456-7890', 11);
```
```text
+------------------------------+-------------------------------------------+
| POSITION('123' IN '456123789') | POSITION('-', 'phone: 123-456-7890', 11) |
+------------------------------+-------------------------------------------+
| 4 | 11 |
+------------------------------+-------------------------------------------+
```