blob: d1f7cd09cea1796ed029dc0bca643cf8cdb1c127 [file] [view]
---
{
"title": "SUB_BINARY",
"language": "en",
"description": "The SUBBINARY function extracts a binary subsequence from a VARBINARY value. You can specify the starting position and the length of bytes to extract."
}
---
## Description
The SUB_BINARY function extracts a binary subsequence from a VARBINARY value. You can specify the starting position and the length of bytes to extract. The first byte position in the binary is 1.
## Syntax
```sql
sub_binary(<bin>, <pos> [, <len>])
```
## Parameters
| Parameter | Description |
| --------- | --------------------------------------------------------- |
| `<bin>` | Source binary value. Type: VARBINARY |
| `<pos>` | Starting byte position, can be negative. Type: INT |
| `<len>` | Optional parameter, number of bytes to extract. Type: INT |
## Return value
Returns VARBINARY type, representing the extracted binary subsequence.
Special cases:
- If any parameter is NULL, returns NULL.
- If pos is 0, returns an empty binary.
- If pos is negative, counts from the end of the binary backwards.
- If pos exceeds the binary length, returns an empty binary.
- If len is not specified, returns all bytes from pos to the end of the binary.
## Example
1. Basic usage (specify starting position)
```sql
SELECT sub_binary(x'61626331', 2);
```
```text
+--------------------------------------------------------+
| sub_binary(x'61626331', 2) |
+--------------------------------------------------------+
| 0x626331 |
+--------------------------------------------------------+
```
2. Using negative position
```sql
SELECT sub_binary(x'61626331', -2);
```
```text
+----------------------------------------------------------+
| sub_binary(x'61626331', -2) |
+----------------------------------------------------------+
| 0x6331 |
+----------------------------------------------------------+
```
3. Case when position is 0
```sql
SELECT sub_binary(x'61626331', 0);
```
```text
+--------------------------------------------------------+
| sub_binary(x'61626331', 0) |
+--------------------------------------------------------+
| 0x |
+--------------------------------------------------------+
```
4. Position exceeds binary length
```sql
SELECT sub_binary(x'61626331', 5);
```
```text
+--------------------------------------------------------+
| sub_binary(x'61626331', 5) |
+--------------------------------------------------------+
| 0x |
+--------------------------------------------------------+
```
5. Specifying length parameter
```sql
SELECT sub_binary(x'61626331646566', 2, 2);
```
```text
+--------------------------------------------------------+
| sub_binary(x'61626331646566', 2, 2) |
+--------------------------------------------------------+
| 0x6263 |
+--------------------------------------------------------+
```