首页 > 解决方案 > 当前日期减一,日期定义为字符串

问题描述

我有一个where这样的 SQL 子句:

AND (((@Shift = 1 
       AND QtyHistoryDetails.stgtxndate 
              BETWEEN (CONVERT(CHAR(10), @StartDate, 101)) + ' 6:00:00' 
                  AND (CONVERT(CHAR(10), @StartDate, 101)) + ' 14:30:00')
     OR (@Shift = 2 
         AND QtyHistoryDetails.stgtxndate 
                BETWEEN (CONVERT(CHAR(10), @StartDate, 101)) + ' 14:00:00' 
                    AND (CONVERT(CHAR(10), @StartDate, 101)) + ' 22:30:00')
     OR (@Shift = 3 
         AND QtyHistoryDetails.stgtxndate 
                BETWEEN (CONVERT(CHAR(10), @StartDate, 101)) + ' 23:00:00' 
                    AND (CONVERT(CHAR(10), @StartDate, 101)) + ' 6:30:00')))
AND cpdPressResource IS NOT NULL
AND cpdmold IS NOT NULL
AND cpdCavities IS NOT NULL

我专注于SHIFT = 3:我需要一种方法来从@shift3负 1 天中提取数据,以显示从前一天到选择日期的数据。这可能吗?

标签: sqlsql-serverreporting-services

解决方案


目前还不是 100% 清楚解决这个问题的最佳方法是什么。您已脱离上下文执行查询的一部分。而且您没有提供任何样本数据或期望的结果。

我认为你可以这样做:

 OR (@Shift = 3 AND
     QtyHistoryDetails.stgtxndate >= CONVERT(CHAR(10), @StartDate, 101)) + ' 23:00:00' AND
     QtyHistoryDetails.stgtxndate < CONVERT(CHAR(10), DATEADD(DAY, 1, @StartDate), 101)) + ' 6:30:00'
    )

老实说,SQL Server 允许您将两个datetime值相加。因此,如果@StartDate声明为 a datetime,您可以使用:

 OR (@Shift = 3 AND
     QtyHistoryDetails.stgtxndate >= @StartDate + ' 23:00:00' AND
     QtyHistoryDetails.stgtxndate < DATEADD(DAY, 1, @StartDate) + ' 6:30:00'
    )

推荐阅读