Sql 替换字符串中特定位置的特定字符

Sql 替换字符串中特定位置的特定字符,sql,database,Sql,Database,我正在使用Oracle SQL Developer。源表中有一列,fiscal\u week\u string,格式如下: 2011-01(09/27-10/31) 我想将其转换为以下格式: 2011-01(09/27至10/31) 也就是说,我想删除一些空白。我还想将大括号内的“-”替换为“到”” 以下是几行: datestr pc周\u开始周\u结束月\u开始月\u结束年mth qtr工作周\u周\u字符串财政月\u字符串 2010-09-27 14879 2010-09-27

我正在使用Oracle SQL Developer。源表中有一列,
fiscal\u week\u string
,格式如下:

2011-01(09/27-10/31)
我想将其转换为以下格式:

2011-01(09/27至10/31)
也就是说,我想删除一些空白。我还想将大括号内的“
-
”替换为“
到”

以下是几行:

datestr pc周\u开始周\u结束月\u开始月\u结束年mth qtr工作周\u周\u字符串财政月\u字符串
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-11-2011-01(09/27-10/03)2011-01(09/27-10/31)


有人能给我介绍一下吗?

您可以使用regexp\u replace替换目标模式

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')
例如:

    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;

由于您尚未共享DDL,因此需要如下所示的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 FIDLE

您使用的是哪一个数据库?您只想在选择查询中进行查询,还是想在表中进行更新?@Luftwaffe Im使用Oracle SQL Developer@Sush我想更新表。请提供一个小的复制:一些DDL来创建示例表,以及一些示例数据。此外,请告诉我们到目前为止您做了哪些尝试和研究。有很多方法可以解决这个问题,了解你的具体处境会有帮助(另外:看到你付出的努力会让别人更愿意帮助你)。德国劳埃德船级社!