SQL - вычисляемый столбец с использованием ISNULL, DATEDIFF и GETDATE - PullRequest
0 голосов
/ 06 ноября 2011

Я использую SQL Server MS. У меня проблемы с написанием этого скрипта:

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, 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

Целью этого является создание представления указанных столбцов в элементе выбора. Последний указанный столбец - это вычисляемый столбец, который должен рассчитывать количество дней, в течение которых арендная плата истекла после даты ее аренды (только если значение return_date равно NULL), и отображать ее как INT. Насколько я понимаю, я на правильном пути, но, очевидно, нет, поскольку при выполнении значения, отображаемые в этом столбце, являются значениями типа данных DATATIME и не имеют смысла.

Ценю любую помощь, которую я могу получить.

1 Ответ

1 голос
/ 06 ноября 2011

Возможно, что-то подобное будет работать для вас.Если значение равно NULL, сравните фиктивную дату 01-01-1900, а затем либо верните DATEDIFF или нулевое значение.

  CASE ISNULL(return_date,'19000101') 
  WHEN '19000101' THEN DATEDIFF(dd, rental_date, GETDATE()) 
  ELSE 0 END 
...