In Oracle, you can use CHECK constraints, REGEXP_LIKE, or TRANSLATE functions to allow only numbers and the -
(hyphen) in a column. Here are different approaches:
1️⃣ Using CHECK Constraint
If you want to restrict a column to accept only numbers and hyphens, you can use a CHECK
constraint with REGEXP_LIKE
:
🔹 Explanation:
^-?
→ Starts with an optional-
\d+
→ Followed by one or more digits$
→ Ensures the string ends after numbers
📌 Use Case: Prevents invalid data from being inserted.
2️⃣ Using REGEXP_LIKE in a Query
To filter out invalid rows in a query:
📌 Use Case: Selects only values with numbers and an optional leading hyphen.
3️⃣ Using TRANSLATE for Validation
If you need a function to validate the input dynamically:
🔹 Explanation:
TRANSLATE(your_column, '0123456789-', ' ')
removes numbers and-
, leaving only invalid characters.- If the result is
NULL
, it means the column contains only numbers and-
.
📌 Use Case: Works well for simple validations without using REGEXP_LIKE
.
4️⃣ Using a BEFORE INSERT/UPDATE Trigger
If you need strict validation before inserting or updating:
📌 Use Case: Prevents invalid inserts and updates.
####################################################################
If you want to allow numbers and hyphens anywhere in the value, you can modify the constraints accordingly. Here’s how:
5. CHECK Constraint
If you want to enforce this rule at the table level:
🔹 Explanation:
^[0-9-]+$
→ Ensures only digits (0-9) and hyphens (-) are allowed, anywhere in the value.- This allows values like:
123-456
-98765
56789
- But blocks invalid values like:
12a34
❌ (letters not allowed)12@34
❌ (special characters not allowed)
6. Using REGEXP_LIKE
in a Query
If you want to filter valid rows:
7. Using TRANSLATE for Validation
To check if a column contains only numbers and hyphens:
🔹 How it works:
- Removes numbers and
-
, leaving invalid characters. - If the result is
NULL
, the input is valid.
8. Using a BEFORE INSERT/UPDATE Trigger
To enforce this rule dynamically:
📌 Use Case: Prevents invalid inserts and updates.
💡 Summary
Method | Use Case |
---|---|
CHECK Constraint | Restricts column values at the table level |
REGEXP_LIKE in WHERE | Filters valid rows in a query |
TRANSLATE Function | Simple validation without REGEXP |
BEFORE INSERT/UPDATE Trigger | Prevents invalid values during insertion |