Ошибка CASE в CASE возникла при переносе в столбец с текстом, дату - MySQL

Узнай цену своей работы

Формулировка задачи:

Подскажите пожалуйста, при формировании второго условия возникла ошибка, как исправить? - как перенести в столбец с текстом, дату с другого столбца?
Листинг программы
  1. SELECT pp.Name,
  2. CASE
  3. WHEN CHARINDEX(' Tights', pp.Name)>0 THEN SUBSTRING(pp.Name, 0, CHARINDEX(' Tights', pp.Name))
  4. WHEN CHARINDEX(',', pp.Name)>0 THEN
  5. CASE
  6. WHEN SUBSTRING(pp.Name, 0, CHARINDEX(',', pp.Name)) = 'Long-Sleeve Logo Jersey' THEN SellStartDate /*дата*/
  7. ELSE SUBSTRING(pp.Name, 0, CHARINDEX(',', pp.Name))
  8. END
  9. ELSE pp.Name
  10. END AS тотото,
  11. CAST(SellStartDate AS DATE) /* убирание времени */
  12. FROM Production.Product AS pp
  13. WHERE SellStartDate = '20050701'

Решение задачи: «Ошибка CASE в CASE возникла при переносе в столбец с текстом, дату»

textual
Листинг программы
  1. SELECT  pp.Name,
  2.       CASE
  3.         WHEN ISNULL(CHARINDEX(',', pp.Name), 0)>0 THEN
  4.                 CASE
  5.                     WHEN SUBSTRING(pp.Name, 0, ISNULL(CHARINDEX(',', pp.Name), 0)) = 'Sport-100 Helmet' THEN CONVERT(nvarchar(10),SellStartDate,104 )  /*сконвертировал дату в текст*/
  6.                     ELSE SUBSTRING(pp.Name, 0, ISNULL(CHARINDEX(',', pp.Name), 0))
  7.                  END
  8.         ELSE pp.Name
  9.       END AS тотото,
  10.        CAST(SellStartDate AS DATE), /* убирание времени */
  11.       CONVERT(nvarchar(10),getdate(),104 ) /* убирание времени в другом формате*/
  12. FROM Production.Product AS pp
  13. 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут