Sql 按存储过程更新日期

Sql 按存储过程更新日期,sql,datediff,procedures,Sql,Datediff,Procedures,我有个问题 我的任务是统计我图书馆数据库中的书的年代。之后称有些书为“太稀有”,有些书为“稀有”和“常用价值”列 我的库表(…,年龄-日期,值-日期) 注意:“年龄”-是对专栏的错误定义,最好说“出版年份”。其实我的任务就是找到年龄 因此,我这样做,并且我的值列不变:( 第1版: 第2版: 另外,对于我犯的任何错误,我深表歉意,这是我学习sql的第一步,编程,并用英语寻求帮助!对我来说,这听起来像是您想要这样的东西(我假设您使用的是sql Server,因为您使用的是GETDATE()函数):

我有个问题

我的任务是统计我图书馆数据库中的书的年代。之后称有些书为“太稀有”,有些书为“稀有”和“常用价值”列

我的库表(…,年龄-日期,值-日期)

注意:“年龄”-是对专栏的错误定义,最好说“出版年份”。其实我的任务就是找到年龄

因此,我这样做,并且我的值列不变:(

第1版:

第2版:


另外,对于我犯的任何错误,我深表歉意,这是我学习sql的第一步,编程,并用英语寻求帮助!

对我来说,这听起来像是您想要这样的东西(我假设您使用的是sql Server,因为您使用的是GETDATE()函数):

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

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

最后,我们希望从中获取数据的表被指定为Books

要在创建存储过程后运行该存储过程,只需执行以下操作:

EXEC foo

SQL只是结构化查询语言——许多数据库系统都使用这种语言,但不是数据库产品……许多东西都是特定于供应商的——因此我们确实需要知道哪个数据库系统(以及哪个版本)您正在使用…您能给出示例数据/预期结果吗?我猜部分问题可能是您正在更新表中的所有行以使其具有相同的值。您可以始终将GETDATE()更改为CURRENT_TIMESTAMP()如果您不使用sql server,但您必须更改case语句以匹配您的sql供应商。是的,我使用的是sql server(2008)。Two-LeggedHorse完全理解此任务。感谢Two-LeggedHorse!!感谢大家的帮助!不知道case语句。我将研究它。它非常有用。向您致意,Ievgenii
  UPDATE books SET value = DATEADD(year,@diff, age)
  UPDATE books SET value = @diff  
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
EXEC foo