Ошибка CASE в CASE возникла при переносе в столбец с текстом, дату - MySQL
Формулировка задачи:
Подскажите пожалуйста, при формировании второго условия возникла ошибка, как исправить? - как перенести в столбец с текстом, дату с другого столбца?
SELECT pp.Name,
CASE
WHEN CHARINDEX(' Tights', pp.Name)>0 THEN SUBSTRING(pp.Name, 0, CHARINDEX(' Tights', pp.Name))
WHEN CHARINDEX(',', pp.Name)>0 THEN
CASE
WHEN SUBSTRING(pp.Name, 0, CHARINDEX(',', pp.Name)) = 'Long-Sleeve Logo Jersey' THEN SellStartDate /*дата*/
ELSE SUBSTRING(pp.Name, 0, CHARINDEX(',', pp.Name))
END
ELSE pp.Name
END AS тотото,
CAST(SellStartDate AS DATE) /* убирание времени */
FROM Production.Product AS pp
WHERE SellStartDate = '20050701'Решение задачи: «Ошибка CASE в CASE возникла при переносе в столбец с текстом, дату»
textual
Листинг программы
SELECT pp.Name,
CASE
WHEN ISNULL(CHARINDEX(',', pp.Name), 0)>0 THEN
CASE
WHEN SUBSTRING(pp.Name, 0, ISNULL(CHARINDEX(',', pp.Name), 0)) = 'Sport-100 Helmet' THEN CONVERT(nvarchar(10),SellStartDate,104 ) /*сконвертировал дату в текст*/
ELSE SUBSTRING(pp.Name, 0, ISNULL(CHARINDEX(',', pp.Name), 0))
END
ELSE pp.Name
END AS тотото,
CAST(SellStartDate AS DATE), /* убирание времени */
CONVERT(nvarchar(10),getdate(),104 ) /* убирание времени в другом формате*/
FROM Production.Product AS pp
WHERE SellStartDate = '20050701'
Объяснение кода листинга программы
- В этом коде происходит запрос данных из таблицы Production.Product (название продукта и дата начала продажи).
- Результат запроса содержит два столбца:
тототоиSellStartDate. Тототоформируется с использованием оператора CASE. Если в названии продукта есть запятая (это проверяется функцией CHARINDEX), то из названия берется часть до запятой (это делается функцией SUBSTRING) и конвертируется в дату (функция CONVERT). Если запятой нет, то просто берется часть до запятой.SellStartDateтакже формируется с использованием оператора CASE. Если дата начала продажи равна '20050701', то она выводится в формате даты (функция CONVERT). Если дата начала продажи другая, то выводится сегодняшняя дата (функция GETDATE).- Время в дате начала продажи убирается с помощью функции CAST, которая преобразует дату в формат без времени.
- В запросе используется функция ISNULL, которая заменяет NULL на 0.
- Запрос содержит условие WHERE, которое выводит только те строки, где дата начала продажи равна '20050701'.