如何在SQL列中查找和更新部分文本

时间:2019-03-06 16:14:10

标签: sql sql-server

我在SQL中进行了一些具有挑战性的列更新。我需要更新列中的部分文本

 ID  DESCRIPTION
  1  Life Membership 10-Sep-2018 to 31-Dec-2018
  2  Oklahoma City Section 10-Sep-2018 to 31-Dec-2018

需要更新

 ID  DESCRIPTION
  1  Life Membership 01-Jan-2019 to 31-Dec-2019
  2  Oklahoma City Section 01-Jan-2019 to 31-Dec-2019

Membershipsection总是在那里,然后是日期的持续时间。请帮助我如何更新此内容。

3 个答案:

答案 0 :(得分:0)

这将查找“描述”列的每一行“ 2018年9月10日”,并将其替换为“ 2019年1月1日”

更新您的表格集description = replace(说明,“ 2018年9月10日”,“ 2019年1月1日”)

请注意,正如Larnu所提到的,这是一个非常糟糕的设计。如果该查询的日期为'10 -Sep-2018',那么它也会更改 second 日期。

答案 1 :(得分:0)

我不确定您的完整数据集,但听起来像是要裁剪并粘贴。在这里,我使用CharIndex()查找单词“ Membership”和“ Section”,然后使用SubString来操作基于这些单词的位置的字符串:(您也可以使用此逻辑来创建一个表格,其中这些值位于单独的列中,以提高通用性)

Create Table #tbl
(
v VarChar(50)
)
Insert Into #tbl Values
('Life Membership 10-Sep-2018 to 31-Dec-2018'),
('Oklahoma City Section 10-Sep-2018 to 31-Dec-2018')

查询:

SELECT 
   Case 
      When CHARINDEX('Membership', v) > 0 Then 
           Substring(v,1,CHARINDEX('Membership',v)+10) + '01-Jan-2019' + Substring(v,CHARINDEX('Membership',v)+22,14) + '9'
      When CHARINDEX('Section', v) > 0 Then 
           Substring(v,1,CHARINDEX('Section',v)+7) + '01-Jan-2019' + Substring(v,CHARINDEX('Section',v)+19,14) + '9'
      End As m
From #tbl

结果:

m
Life Membership 01-Jan-2019 to 31-Dec-2019
Oklahoma City Section 01-Jan-2019 to 31-Dec-2019

答案 2 :(得分:0)

除了两次使用replace()外,别无其他方法:

declare @fromdate varchar(11) = '10-Sep-2018';
declare @todate varchar(11) = '31-Dec-2018';
declare @newfromdate varchar(11) = '01-Jan-2019';
declare @newtodate varchar(11) = '31-Dec-2019';

create table tablename (id int, description varchar(255));

insert into tablename (id, description) values
(1, 'Life Membership 10-Sep-2018 to 31-Dec-2018'),
(2, 'Oklahoma City Section 10-Sep-2018 to 31-Dec-2018');

update tablename
set description = 
  replace(replace(description, @fromdate, @newfromdate), @todate, @newtodate);

请参见demo