首页 > 解决方案 > 如何用新数据更新 SQL 中的部分字符串

问题描述

我有类似Descr=的字符串ANY TEXT 31-Jan-2019 to 30-Jan-2020。是否可以用文本中的新日期替换这些日期?

新数据:

CycleBeginDate = '01/01/2020'
CycleEndDate = '12/31/2022'
Update Desc should be `ANY TEXT 01-Jan-2020 to 31-Dec-2022`

标签: sqltsql

解决方案


这应该可以解决问题,并且为了好玩,我对其进行了设置,以便即使日期出现在字符串中的哪个位置也能正常工作。

DECLARE @string VARCHAR(1000) = 'Blah, blah... yadda, yadda... 31-Jan-2019 to 30-Jan-2020!!!'
--'Descr = ANY TEXT 31-Jan-2019 to 30-Jan-2020';

DECLARE @CycleBeginDate DATE = '01/01/2020';
DECLARE @CycleEndDate   DATE = '12/31/2022';

SELECT NewString = STUFF(STUFF(@string,pos.D1,11,f.D1),pos.D1+15,11,f.D2)
FROM   (VALUES('%[0-9][0-9]-[A-Z][a-z][a-z]-2[0-9][0-9][0-9]%',
        REPLACE(CONVERT(VARCHAR(11),@CycleBeginDate,106),' ','-'),
        REPLACE(CONVERT(VARCHAR(11),@CycleEndDate,106),' ','-'))) AS f(DPat,D1,D2)
CROSS APPLY (VALUES(PATINDEX(f.DPat,@string)))                    AS pos(D1);

回报:

NewString
------------------------------------------------------------
Blah, blah... yadda, yadda... 01-Jan-2020 to 31-Dec-2022!!!

推荐阅读