Ошибка 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'

Объяснение кода листинга программы

  1. В этом коде происходит запрос данных из таблицы Production.Product (название продукта и дата начала продажи).
  2. Результат запроса содержит два столбца: тотото и SellStartDate.
  3. Тотото формируется с использованием оператора CASE. Если в названии продукта есть запятая (это проверяется функцией CHARINDEX), то из названия берется часть до запятой (это делается функцией SUBSTRING) и конвертируется в дату (функция CONVERT). Если запятой нет, то просто берется часть до запятой.
  4. SellStartDate также формируется с использованием оператора CASE. Если дата начала продажи равна '20050701', то она выводится в формате даты (функция CONVERT). Если дата начала продажи другая, то выводится сегодняшняя дата (функция GETDATE).
  5. Время в дате начала продажи убирается с помощью функции CAST, которая преобразует дату в формат без времени.
  6. В запросе используется функция ISNULL, которая заменяет NULL на 0.
  7. Запрос содержит условие WHERE, которое выводит только те строки, где дата начала продажи равна '20050701'.

Оцени полезность:

12   голосов , оценка 4.417 из 5