基于日期的 SQL Case 语句

标签 sql sql-server-2008 tsql sql-update case

我需要创建一个包含 CASE 语句的查询,该语句基本上说

CASE if getdate() > datedue by 31 days
    then status = 'Blocked
END

有谁知道如何检查今天的日期是否比 25/10/2012 大 31 天?

编辑
Select co.OrderID, cu.FName + '  ' + cu.SName as 'Name', 
cu.Address1 + ', ' + cu.Address2 + ', ' + cu.Address3 as 'Dispatch Address', 
cu.PostCode, 
ma.MaterialName as 'Item',
mi.Price as 'Item Price',
co.DateOrdered as 'Order Date',
pm.DueDate,
pm.Overdue,

HERE I NEED TO WRITE A CASE STATEMENT TO INSERT INTO A LOCKEDACCOUNT TABLE
so for example CASE WHEN DATEDIFF(dd, GETDATE(), pm.DueDate) >= 31 THEN INSERT INTO LOCKEDACCOUNT (id, status, datelocked, customerid) VALUES (.....)
END

from Customers cu

最佳答案

像这样:

SELECT 
  CASE 
    WHEN DATEDIFF(dd, GETDATE(), @duedate) >= 1 THEN 'blocked' 
    ELSE 'Not' 
  END AS Status;

SQL Fiddle Demo

注意:如果您没有指定 ELSE子句,默认值为 NULL .

更新:您可以使用 CASE 插入表中像这样的表达:
INSERT INTO Statuses VALUES
(CASE 
   WHEN DATEDIFF(dd, GETDATE(), CAST('20121025' AS DATE)) >= 31 THEN 'Blocked' 
   ELSE 'Not' 
 END);

Updated SQL Fiddle Demo

关于基于日期的 SQL Case 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13493136/

相关文章:

sql - 如何在H2数据库SQL查询中使用当前日期

mysql - 将行显示为表中的列

excel - 根据邮政编码区域将包含邮政编码前缀列表的行拆分为多行

sql - 将日期截断为仅小时/分钟

xml - 如何使用带有 WHERE 子句的 XML.modify 'replace value'

mysql - 将现有表的每个单词大写

sql - 将具有不同行的多个子查询输出检索到 postgresql 中的单个响应中

c# - 如何将 Excel 文件插入/检索到 SQL Server 2008 中的 varbinary(max) 列?

sql - 游标获取语句重复调用第一行

sql - 无效的列名 '-'