【问题标题】:Is there a way to use SET DATEFIRST in a view using SQL Server 2014有没有办法在使用 SQL Server 2014 的视图中使用 SET DATEFIRST
【发布时间】:2023-03-18 17:24:02
【问题描述】:

使用此查询时无法保存视图:

SET DATEFIRST 6

SELECT       
    ISNULL ((SELECT SUM(ISNULL(Qte_achat * Prix_unit, 0) + 
                        ISNULL(qte_achat2 * prix_unit2, 0)) AS SUM_Achat
             FROM dbo.Achat
             WHERE (DATEPART(week, date_achat) = DATEPART(week, GETDATE())) 
               AND (YEAR(date_achat) = YEAR(GETDATE())) 
               AND (used_by_vent = 'false')), 0) AS SUM_Achat 

【问题讨论】:

  • 。 .这个问题已经回答了。您可能想提出一个 问题,其中包含示例数据、所需结果以及您想要完成的任务的说明。 (并接受下面的答案。)
  • 这能回答你的问题吗? Get first day of week in SQL Server 换句话说:使用这些答案来计算一周的开始和结束(与DATEFIRST 无关)并根据这些日期进行过滤。 Bonus 是一个 sarge-able 查询
  • 谢谢,但不是这个

标签: sql sql-server database sql-server-2014


【解决方案1】:

避免使用依赖于此类设置的查询。它很容易破坏您的查询。

由于您的一周从“星期六”开始,因此在计算中使用 Saturday 的基本参考日期(如 1900-01-06)来确定星期

(DATEDIFF(day, '1900-01-06', date_achat) / 7 = (DATEDIFF(day, '1900-01-06', getdate()) / 7

【讨论】:

    【解决方案2】:

    不,Datefirst 是会话的属性。

    您不能在视图中设置它。假设您有一个从两个不同视图中选择的查询,并且您可以为每个视图设置不同的 datefirst,该查询将支持哪种设置?

    您需要在使用视图之前或在存储过程中设置它。

    【讨论】:

      猜你喜欢
      • 2021-01-11
      • 1970-01-01
      • 2011-06-13
      • 2011-09-09
      • 1970-01-01
      • 2020-11-24
      • 2017-01-24
      • 2021-04-10
      • 2013-06-17
      相关资源
      最近更新 更多