获取日期少于1天

时间:2019-09-22 23:10:21

标签: sql sql-server

我想知道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

1 个答案:

答案 0 :(得分:1)

使用DATEADD()

DATEADD(day, -1, @TransDate)

Demo on DB Fiddle

DECLARE @TransDate DATE
SET @TransDate = '2019-09-20'
SELECT DATEADD(day, -1, @TransDate)
| (No column name)    |
| :------------------ |
| 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声明为DATE而不是VARCHAR,然后:

  • 如果列TransDate具有类似DATE的数据类型,则可以直接将其与变量进行比较

  • 如果列TransDateVARCHAR,最安全的处理方法是先将其转换为DATE,然后再进行比较,因此:CONVERT(date, TransDate) <= DATEADD(day, -1, @TransDate)