首页 > 解决方案 > 获取日期少 1 天

问题描述

我想知道 9 月 19 日的数据。

当输入20天的值时,不知道如何表达变量的表达式来得到前一天的值。(@TransDate-1) <---- 我该如何解决这个问题?(数据类型仅为 varchar)

DECLARE @TransDate VARCHAR(10)
SET @TransDate = '2019-09-20'

SELECT ItemCode, SUM(Quantity)
FROM INVENTORYOUTDETAIL
WHERE TransDate <= @TransDate-1 AND FacilityCode = '10' AND OutType='MOVE' 
GROUP BY ItemCode

标签: sqlsql-serverdatesumwhere-clause

解决方案


使用DATEADD()

DATEADD(day, -1, @TransDate)

DB Fiddle 上的演示

DECLARE @TransDate DATE
SET @TransDate = '2019-09-20'
SELECT DATEADD(day, -1, @TransDate)
| (无列名) |
| :----------------- |
| 19/09/2019 00:00:00 |

在您的查询中:

SELECT ItemCode, SUM(Quantity)
FROM INVENTORYOUTDETAIL
WHERE 
    TransDate <= DATEADD(day, -1, @TransDate) 
    AND FacilityCode = '10' 
    AND OutType='MOVE' 
GROUP BY ItemCode

注意:您应该将变量声明@TransDate 为 aDATE而不是VARCHAR,然后:

  • 如果 columnTransDateDATE-like 数据类型,则可以直接将其与变量进行比较

  • 如果 columnTransDate是 a VARCHAR,最安全的方法是在比较之前将其转换为DATEfirst ,所以:CONVERT(date, TransDate) <= DATEADD(day, -1, @TransDate)


推荐阅读