创建存储过程以比较日期列和更新状态列

Posted

技术标签:

【中文标题】创建存储过程以比较日期列和更新状态列【英文标题】:Creating Stored Procedure to compare Date Column and update Status Column 【发布时间】:2015-02-02 10:10:16 【问题描述】:

我需要创建一个存储过程来比较 EXPIRYDATE 列与 SYSTEMDATE 并且如果它们匹配相等,则必须将名为 MATCHSTATUS 的附加列更新为值 1,如果它们不匹配则它必须用值 0 更新。

EXPIRYDATEMATCHSTATUS 都存在于同一个表中。

例子:

username   password   expirydate   matchstatus
-----------------------------------------------------
abc        987        01-Feb-2015       1
xyz        678        10-Feb-2015       0
ghi        456        15-Jan-2015       0

在本例中,匹配状态列应通过将过期日期列与 sysdate 进行比较来更新,并且应由存储过程完成。

【问题讨论】:

为什么需要存储过程? 那有什么问题? 您实际上还没有问过问题,您需要查询方面的帮助吗?您在如何创建存储过程方面需要帮助吗?你想知道存储过程是否是正确的使用方法吗?你只是在聊天吗? 【参考方案1】:

代码可以是这样的

Declare @crntdt NVARCHAR(20)
Declare @mydt NVARCHAR(20)

Select 
@crntdt = REPLACE(rtrim(ltrim(CONVERT(CHAR(15), getdate(), 106))),' ',' - ') 
--select @crntdt
select @mydt=expirydate from your_table

if @crntdt=@mydt
begin
update your_table set matchstatus=1 where expirydate=@mydt
end

【讨论】:

【参考方案2】:

这就是我认为你需要的 - 这假设 expirtydate 是一个日期,如果它是 varchar 你需要将它转换为一个日期:

CREATE PROCEDURE sp_name
as
Begin
Update tbl
set matchstatus = case when expirydate = cast(GETDATE() as date) then 1 else 0 end
END

【讨论】:

以上是关于创建存储过程以比较日期列和更新状态列的主要内容,如果未能解决你的问题,请参考以下文章

通过将列和表名作为参数传递来创建 BigQuery 存储过程

带有枢轴的存储过程不会返回结果结构而是返回零值

更新 SQL Server 表以通过存储过程执行此操作

MySQL 存储过程我

SQL 动态列和更新多列

存储过程mysql从每一行返回每个结果列