0

我有个问题!

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

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

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

所以,我这样做了,我的值列没有改变:(

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  

PS抱歉我犯的任何错误,这是我在sql中的第一步,完全编程,并用英语寻求帮助!

4

1 回答 1

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

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

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

最后指定了我们想要从中获取数据的表,Books。

创建存储过程后运行它很简单:

EXEC foo
于 2012-12-20T21:34:52.613 回答