【问题标题】:SQL - Computed column using ISNULL, DATEDIFF and GETDATESQL - 使用 ISNULL、DATEDIFF 和 GETDATE 计算的列
【发布时间】:2011-11-06 09:36:46
【问题描述】:

我正在使用 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 数据类型值,没有任何意义。

感谢我能得到的任何帮助。

【问题讨论】:

    标签: sql datediff calculated-columns isnull getdate


    【解决方案1】:

    也许这样的东西对你有用。如果该值为 NULL,则比较一个虚拟日期 01-01-1900,然后返回 DATEDIFF 或零值。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多