按存储过程更新日期

时间:2012-12-20 21:13:19

标签: sql datediff procedures

我有问题!

我的任务是计算图书馆数据库中图书的年龄。在那之后,将一些书籍称为太罕见,一些罕见,并且通常使用值列。

我的图书馆表(...,年龄日期,价值日期)

注意:“年龄” - 列的定义不正确,最好说“出版年份”。其实我的任务是找到年龄!

所以,我这样做,我的值列不会改变:(

create procedure foo 
as
  declare @bookdate date,
          @currentdate date,
          @diff int

  set @currentdate = GETDATE()

  select @bookdate =  age from books

  select @diff = DATEDIFF (yyyy , @bookdate , @currentdate )

版本#1:

  UPDATE books SET value = DATEADD(year,@diff, age)

版本#2:

  UPDATE books SET value = @diff  

P.S。对不起我犯的任何错误,这是我在sql中的第一步,编程,并寻求英文帮助!

1 个答案:

答案 0 :(得分:0)

对我来说,听起来你想要这样的东西(我假设你使用的是SQL Server,因为你已经使用了GETDATE()函数):

CREATE PROCEDURE foo

AS
BEGIN

    SELECT   *
            ,DATEDIFF(yyyy,age,GETDATE()) AS YearsSincePublication
            ,CASE   WHEN DATEDIFF(yyyy,age,GETDATE()) > 200 THEN 'Too rare'
                    WHEN DATEDIFF(yyyy,age,GETDATE()) > 100 THEN 'Rare'
                    ELSE 'Usual'
             END AS Value
    FROM    books

END

顶部工作:
*表示所有表格中的所有列 dateiff计算出自发布以来的年数,AS位命名结果列(给它一个别名)。

CASE语句是一种测试语句的方法(如果a等于b,则执行c)。第一个语句检查是否该书超过200年,如果是,写“太罕见”,第二行检查超过100年,否则写“通常”。同样,AS用于将列标记为Value。

最后,我们希望我们的数据表是指定的,Books。

要在创建存储过程后运行存储过程,只需:

EXEC foo