Последнее обновление
DECODE
Описание
Преобразует значение VARBINARY в строку с использованием указанной кодировки. Имена кодировок нечувствительны к регистру. Поддерживаются кодировки US-ASCII, ISO-8859-1, UTF-8, UTF-16BE, UTF-16LE и UTF-16.
Синтаксис
DECODE(<binary>, <charset>)
Параметры
| Параметр | Описание |
|---|---|
<binary> | Двоичное значение для декодирования. Тип: VARBINARY. |
<charset> | Строковый литерал с именем кодировки входных байтов или NULL. Поддерживаемые значения: US-ASCII, ISO-8859-1, UTF-8, UTF-16BE, UTF-16LE и UTF-16. Использование столбца или другого выражения не допускается. |
Возвращаемое значение
Возвращает значение типа STRING, содержащее декодированный текст.
- Если
<charset>равенNULLили если<binary>равенNULL, а<charset>содержит допустимое значение, функция возвращаетNULL. - Если
<binary>пуст, функция возвращает пустую строку. - Для
UTF-16функция распознаёт BOM с порядком байтов big-endian (FE FF) и little-endian (FF FE) и удаляет BOM из результата. При отсутствии BOM входные данные декодируются с порядком байтов big-endian.UTF-16BEиUTF-16LEвсегда используют явно заданный порядок байтов. - Если
<charset>не поддерживается, функция возвращает ошибку, даже когда<binary>равенNULL. Если<binary>содержит некорректные данные для указанной кодировки, функция также возвращает ошибку.
Пример
Декодирование байтов UTF-8
SELECT DECODE(CAST(UNHEX('E4B8AD') AS VARBINARY), 'UTF-8') AS decoded_text;
+--------------+
| decoded_text |
+--------------+
| 中 |
+--------------+
Декодирование UTF-16 с порядком байтов little-endian и BOM
Имя кодировки в нижнем регистре также демонстрирует сопоставление без учёта регистра.
SELECT DECODE(CAST(UNHEX('FFFE2D4E') AS VARBINARY), 'utf-16') AS decoded_text;
+--------------+
| decoded_text |
+--------------+
| 中 |
+--------------+
NULL и пустые входные данные
SELECT
DECODE(CAST(NULL AS VARBINARY), 'UTF-8') IS NULL AS null_result,
DECODE(CAST(UNHEX('') AS VARBINARY), 'UTF-16') = '' AS empty_result;
+-------------+--------------+
| null_result | empty_result |
+-------------+--------------+
| 1 | 1 |
+-------------+--------------+