blob: 6ddc98cf07af0d461070fa3351bfd680d5001743 [file] [view]
---
{
"title": "DECODE",
"language": "en",
"description": "Converts a VARBINARY value to a string using the specified character set for Hive-compatible character conversion."
}
---
<version since="dev">
</version>
## Description
Converts a `VARBINARY` value to a string using the specified character set. Character set names are case-insensitive. The supported character sets are `US-ASCII`, `ISO-8859-1`, `UTF-8`, `UTF-16BE`, `UTF-16LE`, and `UTF-16`.
## Syntax
```sql
DECODE(<binary>, <charset>)
```
## Parameters
| Parameter | Description |
| :--- | :--- |
| `<binary>` | The binary value to decode. Type: VARBINARY. |
| `<charset>` | A string literal naming the character set used by the input bytes, or `NULL`. Supported values are `US-ASCII`, `ISO-8859-1`, `UTF-8`, `UTF-16BE`, `UTF-16LE`, and `UTF-16`. A column or other expression is not allowed. |
## Return Value
Returns a `STRING` value containing the decoded text.
- If `<charset>` is `NULL`, or `<binary>` is `NULL` and `<charset>` is valid, the function returns `NULL`.
- If `<binary>` is empty, the function returns an empty string.
- For `UTF-16`, the function recognizes big-endian (`FE FF`) and little-endian (`FF FE`) BOMs and removes the BOM from the result. Without a BOM, it decodes the input as big-endian. `UTF-16BE` and `UTF-16LE` always use their explicit byte order.
- If `<charset>` is unsupported, the function returns an error even when `<binary>` is `NULL`. If `<binary>` is malformed for the specified character set, the function also returns an error.
## Example
**Decode UTF-8 bytes**
```sql
SELECT DECODE(CAST(UNHEX('E4B8AD') AS VARBINARY), 'UTF-8') AS decoded_text;
```
```text
+--------------+
| decoded_text |
+--------------+
| 中 |
+--------------+
```
**Decode little-endian UTF-16 with a BOM**
The lower-case character set name also demonstrates case-insensitive matching.
```sql
SELECT DECODE(CAST(UNHEX('FFFE2D4E') AS VARBINARY), 'utf-16') AS decoded_text;
```
```text
+--------------+
| decoded_text |
+--------------+
| 中 |
+--------------+
```
**NULL and empty input**
```sql
SELECT
DECODE(CAST(NULL AS VARBINARY), 'UTF-8') IS NULL AS null_result,
DECODE(CAST(UNHEX('') AS VARBINARY), 'UTF-16') = '' AS empty_result;
```
```text
+-------------+--------------+
| null_result | empty_result |
+-------------+--------------+
| 1 | 1 |
+-------------+--------------+
```