The ASCIISTR function in Oracle SQL is a special-purpose utility that converts a string from any character set into a "safe" 7-bit ASCII representation.
Its main purpose is to make non-ASCII characters (like Ä, Ç, or ñ) "visible" by converting them into their Unicode escape sequence (e.g., \00C4).
What is the ASCIISTR Function in Oracle?
The ASCIISTR(char) function takes a string and returns a new string in the database character set.
- Any standard ASCII characters (A-Z, 0-9, !, ?, etc.) are left unchanged.
- Any non-ASCII character is converted to a
\xxxxcode, wherexxxxis its UTF-16 code unit.
This function is not for displaying to end-users. It's a technical tool for:
- Debugging: "Seeing" hidden or un-printable characters in your data.
- Data Sanitization: Converting a string into a pure ASCII format before exporting it to a legacy system that might not support Unicode.
ASCIISTR Function Syntax
The syntax for ASCIISTR is very simple:
ASCIISTR(char)
Let's break that down:
char: The string or column you want to convert.
Oracle ASCIISTR Function Examples
Here are two practical examples of how to use ASCIISTR.
Example 1: Converting a String with Non-ASCII Characters using ASCIISTR
This example shows the function converting a German name that contains an umlaut (Ä). The Ä is not a standard ASCII character, so it will be converted to its Unicode representation.
Query:
SELECT
ASCIISTR('MÄLLER') AS "ASCII_String"
FROM DUAL;
Result: (The non-ASCII character Ä is converted to \00C4)
ASCII_String
------------
M\00C4LLER
Example 2: Identifying "Problem" Data using ASCIISTR
Imagine you are trying to find data that is not pure ASCII. You can compare the ASCIISTR version of a string to its original version. If they are different, you know the string contains non-ASCII characters.
Query:
WITH user_data AS (
SELECT 'John Smith' AS name FROM DUAL UNION ALL
SELECT 'José' AS name FROM DUAL
)
SELECT
name,
ASCIISTR(name) AS "Safe_String"
FROM user_data
WHERE
name != ASCIISTR(name); -- Find only the ones that change
Result: (This query finds only the "problem" data. 'John Smith' is filtered out because ASCIISTR('John Smith') is the same as the original.)
NAME Safe_String
---- -----------
José Jos\00E9