You can use the simple string functions INSTR
and SUBSTR
(which are much faster than regular expressions):
SELECT SUBSTR(local_part, INSTR(local_part, '.', -1) + 1) AS last_name,
SUBSTR(domain, 1, INSTR(domain, '.') - 1) AS domain
FROM (
SELECT SUBSTR(email, 1, INSTR(email, '@', -1) - 1) AS local_part,
SUBSTR(email, INSTR(email, '@', -1) + 1) AS domain
FROM table_name
)
Which, for the sample data:
CREATE TABLE table_name(email) AS
SELECT 'raju.das@example.com' FROM DUAL UNION ALL
SELECT 'javed.khan@example.com' FROM DUAL UNION ALL
SELECT 'Amit.kumar.bera@example.com' FROM DUAL;
Outputs:
LAST_NAME |
DOMAIN |
das |
example |
khan |
example |
bera |
example |
If you did want to use regular expression (which will be slower) then:
SELECT REGEXP_SUBSTR(email, '([^.]+)@([^.]+)', 1, 1, NULL, 1) AS last_name,
REGEXP_SUBSTR(email, '([^.]+)@([^.]+)', 1, 1, NULL, 2) AS domain
FROM table_name;
Gives the same output.
fiddle