我在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
Membership
或section
总是在那里,然后是日期的持续时间。请帮助我如何更新此内容。
答案 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