【问题标题】:Current Date minus one with a date defined as a string当前日期减一,日期定义为字符串
【发布时间】:2021-06-17 14:44:03
【问题描述】:

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

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 天来显示从前一天到选定日期的数据。这可能吗?

【问题讨论】:

  • 您使用的是哪个 dbms? (在日期/时间方面,许多产品远不符合 ANSI SQL。)
  • @jarlh 这是在 SQL 中
  • 肯定不是 ANSI/ISO SQL。例如。 convert() 是一个产品特定的函数。
  • @Jarlh,所以为了给出上下文,我需要传递一个等于日期的字符串值。所以在我的情况下,字符串值是@shift=X。用户将用 1 到 3 之间的数字子 X。我想做的是说当你选择 3 时,你可以看到从前一天“晚上 10 点”到“上午 12 点”到今天上午 12:00:01 到下午 6 点。我该怎么做?
  • 我猜你的意思是 Sql Server?然后请添加该标签

标签: sql sql-server reporting-services


【解决方案1】:

目前还不是 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 被声明为 datetime,您可以使用:

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

【讨论】:

    猜你喜欢
    • 2012-08-21
    • 2021-11-09
    • 2023-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多