我想知道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
答案 0 :(得分:1)
使用DATEADD()
:
DATEADD(day, -1, @TransDate)
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
的数据类型,则可以直接将其与变量进行比较
如果列TransDate
是VARCHAR
,最安全的处理方法是先将其转换为DATE
,然后再进行比较,因此:CONVERT(date, TransDate) <= DATEADD(day, -1, @TransDate)