Поле salesId должно иметь текст, подобный
. Вы должны изменить свой запрос на обновление, чтобы включить, если столбец уже обновлен, так что для SUBSTRING_INDEX требуется только число
update sales
set salesId = case
when month(salesDate)>=4 then concat(SUBSTRING_INDEX(salesId,'/',1),concat("/",year(salesDate),"-",year(salesDate)+1))
else
concat(SUBSTRING_INDEX(salesId,'/',1),concat("/",year(salesDate)-1,"-",year(salesDate)))
end
where cast(SUBSTRING_INDEX(salesId,'/',1) as unsigned) between "7" and "10";
, поэтому что ваша функция обновления может работать
CREATE TABLE sales (
`salesId` VARCHAR(20),
`salesDate` VARCHAR(10)
);
INSERT INTO sales
(`salesId`, `salesDate`)
VALUES
('7', '2017-05-15'),
('8', '2017-06-16'),
('9', '2017-07-18'),
('10', '2017-08-20');
✓
✓
update sales
set salesId = case
when month(salesDate)>=4 then concat(salesId,concat("/",year(salesDate),"-",year(salesDate)+1))
else
concat(salesId,concat("/",year(salesDate)-1,"-",year(salesDate)))
end
where cast(salesId as unsigned) between "7" and "10";
✓
SELECT * from sales
salesId | salesDate
:----------- | :---------
7/2017-2018 | 2017-05-15
8/2017-2018 | 2017-06-16
9/2017-2018 | 2017-07-18
10/2017-2018 | 2017-08-20
update sales
set salesId = case
when month(salesDate)>=4 then concat(SUBSTRING_INDEX(salesId,'/',1),concat("/",year(salesDate),"-",year(salesDate)+1))
else
concat(SUBSTRING_INDEX(salesId,'/',1),concat("/",year(salesDate)-1,"-",year(salesDate)))
end
where cast(SUBSTRING_INDEX(salesId,'/',1) as unsigned) between "7" and "10";
✓
SELECT * from sales
salesId | salesDate
:----------- | :---------
7/2017-2018 | 2017-05-15
8/2017-2018 | 2017-06-16
9/2017-2018 | 2017-07-18
10/2017-2018 | 2017-08-20
дБ <> скрипка здесь