I have a data like below with tab limited among them. I have represented them with a view here
with t_view as (select '6-21 6-21 6-21 6-21 6-21 6-21 6-21 ' as col from dual
union
select '6-20 6-20 6-20 6-20 6-20 ' from dual
union
select '6-9 6-9 6-9 6-9 6-9 6-9 6-9 ' from dual)
My expected output is
Mon: 6-21, Tue: 6-21, Wed: 6-21, Thu: 6-21, Fri: 6-21, Sat: 6-21, Sun: 6-21
Mon: 6-20, Tue: 6-20, Wed: 6-20, Thu: 6-20, Fri: 6-20
Mon: 6-9, Tue: 6-9, Wed: 6-9, Thu: 6-9, Fri: 6-9, Sat: 6-9, Sun: 6-9
I thought of replacing all those horizontal table with some unique patterns like this and then replace that pattern with Mon, Tue based on indexing
$1(6-20 )$2(6-20 )$3(6-20 )$4(6-20 )$5(6-20 )
I have tried the below query but could not complete it
select regexp_replace(col, '([[:digit:]]-[[:digit:]]{2}[[:space:]]+)','$(\1)') from t_view;
Oracle Database SQL Functions for Regular ExpressionsYou can use these functions on any datatype that holds character data such as CHAR, NCHAR, CLOB, NCLOB, NVARCHAR2, and VARCHAR2. A regular expression must be enclosed or wrapped between single quotes.
Description. The Oracle REGEXP_LIKE condition allows you to perform regular expression matching in the WHERE clause of a SELECT, INSERT, UPDATE, or DELETE statement.
The REGEXREPLACE( ) function uses a regular expression to find matching patterns in data, and replaces any matching values with a new string. standardizes spacing in character data by replacing one or more spaces between text characters with a single space.
Oracle supports the backreference expression in the regular expression pattern and the replacement string of the REGEXP_REPLACE function.
You need a combination of CASE expression, REGEXP_COUNT and REGEXP_REPLACE since you do not have the same expression for all the rows. Depending on the data, you could have as many conditions in the case expression.
The regular expression pattern is (\d-\d+ )
.
For example,
SQL> WITH t_view(col) AS
2 ( SELECT '6-21 6-21 6-21 6-21 6-21 6-21 6-21 ' FROM dual
3 UNION
4 SELECT '6-20 6-20 6-20 6-20 6-20 ' FROM dual
5 UNION
6 SELECT '6-9 6-9 6-9 6-9 6-9 6-9 6-9 ' FROM dual
7 )
8 SELECT REPLACE(new_col, ' ','') new_col
9 FROM (
10 SELECT
11 CASE
12 WHEN regexp_count(col, '\d+\-\d+') = 5
13 THEN regexp_replace(col,
14 '(\d-\d+ )(\d-\d+ )(\d-\d+ )(\d-\d+ )(\d-\d+ )',
15 'Mon: \1, Tue: \2,Wed: \3,Thu: \4,Fri: \5')
16 WHEN regexp_count(col, '\d+\-\d+') = 7
17 THEN regexp_replace(col,
18 '(\d-\d+ )(\d-\d+ )(\d-\d+ )(\d-\d+ )(\d-\d+ )(\d-\d+ )(\d-\d+ )',
19 'Mon: \1, Tue: \2,Wed: \3,Thu: \4,Fri: \5,Sat: \6,Sun: \7')
20 END new_col
21 FROM t_view
22 );
NEW_COL
----------------------------------------------------------------------------------------------------
Mon: 6-20, Tue: 6-20,Wed: 6-20,Thu: 6-20,Fri: 6-20
Mon: 6-21, Tue: 6-21,Wed: 6-21,Thu: 6-21,Fri: 6-21,Sat: 6-21,Sun: 6-21
Mon: 6-9, Tue: 6-9,Wed: 6-9,Thu: 6-9,Fri: 6-9,Sat: 6-9,Sun: 6-9
SQL>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With