#sql #sql-server #sql-server-2008
#sql #sql-сервер #sql-сервер-2008
Вопрос:
Использование оператора Case в запросе, похоже, работает нормально, если единственный случай, который вы хотите сопоставить, — это строка. Но если вы хотите поставить «>» больше (дата или число) и т.д., SSMS автоматически добавляет апострофы вокруг вашего оператора (ниже), как если бы это была строка.
Как я могу заставить его принимать «больше даты» или «больше числа» и т. Д.??
Комментарии:
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
синтаксиса.