Ошибка 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'.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д