2014-12-18 3 views
0

Я использую Oracle SQL Developer. Существует один столбец в исходной таблице, fiscal_week_string, который находится в следующем формате:Заменить конкретные символы в определенных положениях в строке

2011 – 01 (09/27 – 10/31) 

Я хочу, чтобы преобразовать это в следующем формате:

2011-01 (09/27 to 10/31) 

Т.е., я хочу, чтобы удалить a некоторые белых пространств. Я также хочу заменить «-» внутри фигурных скобок «to».

Вот несколько строк:

datestr pc WEEK_START WEEK_END month_start mnth_end year mth qtr wk fiscal_week_string Fiscal_month_string 2010-09-27 14879 2010-09-27 2010-10-03 2010-09-27 2010-10-31 2011 1 1 1 2011 – 01 (09/27 – 10/03) 2011 – 01 (09/27 – 10/31) 2010-09-28 14880 2010-09-27 2010-10-03 2010-09-27 2010-10-31 2011 1 1 1 2011 – 01 (09/27 – 10/03) 2011 – 01 (09/27 – 10/31)

Может кто-нибудь, пожалуйста, руководство меня с этим?

+0

Какую базу данных вы используете? – Luftwaffe

+0

Вы просто хотите выбрать запрос или хотите обновить его в таблице? – Sush

+0

@Luftwaffe Im, использующий Oracle SQL Developer. – FenderBender

ответ

1

ожидая DDL, как показано ниже, так как вы не делились

create table table_one 
(
fiscal_week_string varchar(30) 
); 

insert into table_one 
values ('2011 – 01 (09/27 – 10/31)'); 

insert into table_one 
values ('2011 – 01 (09/26 – 11/31)'); 

ваш запрос Oracle будет

select col_one || col_two || col_three || ' ' || col_four||' '|| 'to'||' '||col_six as fmt_date 
from 
(
select REGEXP_SUBSTR(t.fiscal_week_string, '[^ ]+', 1, 1) col_one, 
REGEXP_SUBSTR(t.fiscal_week_string, '[^ ]+', 1, 2) col_two, 
REGEXP_SUBSTR(t.fiscal_week_string, '[^ ]+', 1, 3) col_three, 
REGEXP_SUBSTR(t.fiscal_week_string, '[^ ]+', 1, 4) col_four, 
REGEXP_SUBSTR(t.fiscal_week_string, '[^ ]+', 1, 5) col_five, 
REGEXP_SUBSTR(t.fiscal_week_string, '[^ ]+', 1, 6) col_six 
from table_one t 
) 

и

приводит

2011–01 (09/27 to 10/31) 
2011–01 (09/26 to 11/31) 

SQL Fiddle http://sqlfiddle.com/#!4/c30b15/8

0
DECLARE @str varchar(50)='2011 – 01 (09/27 – 10/31)' 

SELECT REPLACE(SUBSTRING(@str, 0,CHARINDEX('(',@str)),' ','')+' '+ REPLACE(SUBSTRING(@str,CHARINDEX('(',@str),len(@str)),'–','to') 
1

Вы можете использовать regexp_replace для замены целевых шаблонов.

Пример:

select regexp_replace(
    regexp_replace('2011 - 01 (09/27 - 10/31)',' - ','-',1,1) 
    , ' - ',' to ') from dual; 

обновление Пример:

create table a1(id number, name varchar2(100)); 
insert into a1 values(1, '2011 - 01 (09/27 - 10/31)'); 
update a1 set name= 
regexp_replace(regexp_replace(name,' - ','-',1,1), ' - ',' to ') where id=1; 
select * from a1; 
Смежные вопросы