СЛУЧАЙ SQL в запросе — странное поведение

#sql #sql-server #sql-server-2008

#sql #sql-сервер #sql-сервер-2008

Вопрос:

Использование оператора Case в запросе, похоже, работает нормально, если единственный случай, который вы хотите сопоставить, — это строка. Но если вы хотите поставить «>» больше (дата или число) и т.д., SSMS автоматически добавляет апострофы вокруг вашего оператора (ниже), как если бы это была строка.

Как я могу заставить его принимать «больше даты» или «больше числа» и т. Д.??

SSMS добавляет операторы ' around, используемые в операторе CASE в запросе

Комментарии:

1. Не используете конструктор запросов?

2. Конструктор запросов в SQL server примерно такой же (не) интеллектуальный, как и в MS Acess. Просто измените необработанный код SQL самостоятельно, чтобы исправить инструкцию.

Ответ №1:

Существует два типа выражения РЕГИСТРА:

  • Выражение простого регистра сравнивает выражение с набором простых выражений для определения результата.
  • Искомое выражение CASE вычисляет набор логических выражений для определения результата.

Вам нужно искомое выражение регистра. Это означает, что WHEN должен идти сразу после ключевого слова CASE .

 CASE WHEN SoldDate <= SubjectDate THEN ...
 

Комментарии:

1. 1 — Извините за закрытость наших ответов, вы расширили свои, пока я писал свои 🙂

Ответ №2:

Существует два типа CASE выражений (из msdn):

Простое CASE сравнивает указанное выражение ТОЛЬКО для ЭКВИВАЛЕНТНОСТИ

SELECT FieldName CASE WHEN 'Blah' THEN 'Foo' ELSE 'Bah' END

A Searched CASE тоже может выполнять неравенства, но имеет более подробный синтаксис:

SELECT CASE WHEN FieldName >= 'Blah' THEN 'Foo' ELSE 'Bah' END

Вы пытаетесь использовать простой синтаксис, и вам необходимо использовать синтаксис поиска, явно записывая имя поля и сравнение для каждой оценки.

Ответ №3:

Ваш CASE синтаксис оператора неверен. WHEN должен прийти сразу после CASE

Это:

 CASE SoldDate WHEN ...
 

Должно быть так:

 CASE WHEN SoldDate <= SubjectDate THEN SoldFor ELSE EstSalePrice END
 

Дополнительная информация

Взгляните на документы MSDN для получения дополнительных примеров CASE синтаксиса.