как обновить частичную строку в SQL новыми данными - PullRequest
0 голосов
/ 09 октября 2019

У меня есть строка типа 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`

Ответы [ 2 ]

0 голосов
/ 09 октября 2019

Это должно сработать, и, ради интереса, я настроил его так, чтобы он работал даже независимо от того, где даты появляются в строке.

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!!!
0 голосов
/ 09 октября 2019

Да, это возможно и намного проще, если вы предположите, что даты всегда будут НА КОНЦЕ значения "desc" (как у вас в выборке) и что даты всегда заполнены нулями (1 январябыть "01-Jan-2019", а не "1-Jan-2019) ... что означает, что текст дат в конце может всегда иметь длину 26 байт;вы можете ....

update t
     set desc = left( 'ANY TEXT 31-Jan-2019 to 30-Jan-2020', len( 'ANY TEXT 31-Jan-2019 to 30-Jan-2020' ) - 26 ) + @CycleBeginDate + ' to ' + @CycleEndDate
    from YourTable t

Очевидно, что это становится намного сложнее, если диапазон дат, который вы хотите изменить, может быть отформатирован по-разному (не всегда 26 байтов текста для замены) или может быть расположен в другомместоположения в вашем значении "desc".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...