#sql #syntax
#sql #синтаксис
Вопрос:
Небольшая проблема с моим запросом здесь:
CREATE VIEW rental_view
AS
SELECT
m.movie_id, movie_name, co.copy_id,
f.format_id, format_name, cu.customer_id,
(first_name ' ' surname) AS customer_name,
rental_id, rental_date, return_date,
ISNULL(return_date, CAST(DATEDIFF(dd, rental_date, GETDATE() ) AS rental_duration
FROM
movie AS m
INNER JOIN copy AS co ON m.movie_id = co.movie_id
INNER JOIN format AS f ON co.format_id = f.format_id
INNER JOIN rental ON co.copy_id = rental.copy_id
INNER JOIN customer AS cu ON rental.customer_id = cu.customer_id
Приводит к ошибке:
Сообщение 156, уровень 15, состояние 1,
Процедура rental_view, строка 3 Неправильный синтаксис рядом с ключевым словом ‘FROM’.
Я долго пытался это сделать и не могу решить.
Ценю помощь.
Ответ №1:
В этой строке не хватает двух круглых скобок:
AS SELECT
m.movie_id, movie_name, co.copy_id, f.format_id, format_name,
cu.customer_id, (first_name ' ' surname) AS customer_name,
rental_id, rental_date, return_date,
ISNULL(
return_date,
CAST(DATEDIFF(dd, rental_date, GETDATE()))) AS rental_duration
В любом случае ваш синтаксис неправильный в других частях:
Комментарии:
1. Где должна быть скобка?
2. @Owen еще два после последнего )
3. @Owen: после
GETDATE())
вам нужны еще две круглые скобки, как я написал 😉4. Чувак, я думаю, что скобка должна быть в конце после rental_duration, потому что приведение будет ожидать, что после него будет AS
5. @AllanChua: нет, скобки должны быть там, где я их помещаю, потому что окончательное значение AS задается для предоставления псевдонима вычисляемому полю. В любом случае, как вы заметили, запрос неверен в других частях, как я написал в своем ответе 🙂
Ответ №2:
попробуйте это:
CREATE VIEW rental_view
AS SELECT m.movie_id,
movie_name,
co.copy_id,
f.format_id,
format_name,
cu.customer_id,
(first_name ' ' surname) AS customer_name,
rental_id,
rental_date,
return_date,
ISNULL(return_date,
CAST(DATEDIFF(dd, rental_date, GETDATE()) AS *type desired here*)) AS name of column
FROM movie as m
INNER JOIN copy AS co
ON m.movie_id = co.movie_id
INNER JOIN format AS f
ON co.format_id = f.format_id
INNER JOIN rental
ON co.copy_id = rental.copy_id
INNER JOIN customer AS cu
ON rental.customer_id = cu.customer_id
Комментарии:
1. Я думаю, что вы ставите скобки не в том месте. В любом случае я уже дал ответ «вам не хватает круглой скобки» 😉
2. Ваш отредактированный пост по-прежнему неверен:
DATEDIFF
требуется только два параметра 😉3. DATEDIFF ( datepart , startdate , enddate ) смотрите ( msdn.microsoft.com/en-us/library/ms189794.aspx )
4. Может быть, приятель, проблема в том, что ребенок не указал, какой сервер он использует, но с параметрами, которые у него есть в функции DATEDIFF, это больше похоже на СЕРВЕР MS SQL
5. Это MS SQL SERVER извините, действительно следовало упомянуть.