我有问题!
我的任务是计算图书馆数据库中图书的年龄。在那之后,将一些书籍称为太罕见,一些罕见,并且通常使用值列。
我的图书馆表(...,年龄日期,价值日期)
注意:“年龄” - 列的定义不正确,最好说“出版年份”。其实我的任务是找到年龄!
所以,我这样做,我的值列不会改变:(
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中的第一步,编程,并寻求英文帮助!
答案 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