รับวันที่เริ่มต้นสัปดาห์และวันที่สิ้นสุดสัปดาห์จากหมายเลขสัปดาห์


99

ฉันมีแบบสอบถามที่นับวันแต่งงานของสมาชิกในฐานข้อมูล

SELECT 
  SUM(NumberOfBrides) AS [Wedding Count]
  , DATEPART( wk, WeddingDate) AS [Week Number]
  , DATEPART( year, WeddingDate) AS [Year]
FROM  MemberWeddingDates
GROUP BY DATEPART(year, WeddingDate), DATEPART(wk, WeddingDate)
ORDER BY SUM(NumberOfBrides) DESC

ฉันจะทราบได้อย่างไรว่าเมื่อเริ่มต้นและสิ้นสุดของแต่ละสัปดาห์แสดงในชุดผลลัพธ์

SELECT
  SUM(NumberOfBrides) AS [Wedding Count]
  , DATEPART(wk, WeddingDate) AS [Week Number]
  , DATEPART(year, WeddingDate) AS [Year]
  , ??? AS WeekStart
  , ??? AS WeekEnd
FROM  MemberWeddingDates
GROUP BY DATEPART(year, WeddingDate), DATEPART(wk, WeddingDate)
ORDER BY SUM(NumberOfBrides) DESC

คำตอบ:


164

คุณสามารถค้นหาวันในสัปดาห์และเพิ่มวันที่เพื่อรับวันที่เริ่มต้นและวันที่สิ้นสุด ..

DATEADD(dd, -(DATEPART(dw, WeddingDate)-1), WeddingDate) [WeekStart]

DATEADD(dd, 7-(DATEPART(dw, WeddingDate)), WeddingDate) [WeekEnd]

คุณอาจต้องการดูการตัดเวลาจากวันที่ด้วยเช่นกัน


3
จำไว้ว่าการตั้งค่าDATEFIRSTเป็นอย่างอื่นนอกเหนือจาก 7 แบ่งสิ่งนี้
Tomalak

5
มันจะไม่ "แตก" มันจะใช้ datefirst เพื่อตั้งค่า WeekStart = ตามที่ DateFirst บอกว่าวันแรกของสัปดาห์คือ เวอร์ชันของคุณจะทำวันจันทร์และวันอาทิตย์เป็นวันเริ่มต้นและสิ้นสุดของสัปดาห์ไม่ใช่สิ่งที่เซิร์ฟเวอร์กำหนดให้ใช้เป็นวันเริ่มต้นและสิ้นสุดสัปดาห์
วันโรบิน

1
หืม ... นั่นคือจุดที่ถูกต้อง +1 :) ฉันจะลบของฉันแล้ว (แม้ว่าจะเป็นการยิงที่เท้า แต่มันก็เล็งได้ดีมากg )
Tomalak

1
ถ้าอย่างนั้นฉันก็ยกเลิกการลบอีกครั้ง ฉันไม่แน่ใจว่าใครในความคิดที่ถูกต้องของพวกเขาจะถือว่าอะไรนอกเหนือจากวันจันทร์เป็นจุดเริ่มต้นของสัปดาห์ ในการเริ่มต้นสัปดาห์ในวันอาทิตย์ที่ทำให้รู้สึกไม่ว่ากรณีใด ๆ :-)
Tomalak

4
'set datefirst 1' สำหรับวันจันทร์ ( msdn.microsoft.com/en-ie/library/ms181598.aspx )
Selrac

41

นี่คือDATEFIRSTวิธีแก้ปัญหาที่ไม่เชื่อเรื่องพระเจ้า:

SET DATEFIRST 4     /* or use any other weird value to test it */
DECLARE @d DATETIME

SET @d = GETDATE()

SELECT
  @d ThatDate,
  DATEADD(dd, 0 - (@@DATEFIRST + 5 + DATEPART(dw, @d)) % 7, @d) Monday,
  DATEADD(dd, 6 - (@@DATEFIRST + 5 + DATEPART(dw, @d)) % 7, @d) Sunday

11
ดีมาก แต่วันจันทร์ไม่ได้ผลสำหรับฉัน ฉันต้องเพิ่ม "0 -" เพื่อรับวันจันทร์ รหัสวันจันทร์ของฉันตอนนี้: DATEADD (dd, 0 - (@@ DATEFIRST + 5 + DATEPART (dw, @d))% 7, @d)
วอร์เรน

เพิ่มคะแนนทั้งคำตอบและความคิดเห็นของ Warrens Sql Server เวอร์ชัน 11.0.5058.0 อย่างน้อยที่สุดให้วันจันทร์ที่ไม่ถูกต้องโดยไม่ต้องแก้ไข Warrens ให้ฉันเป็นวันศุกร์แทน
Morvael

18

คุณยังสามารถใช้สิ่งนี้:

  SELECT DATEADD(day, DATEDIFF(day, 0, WeddingDate) /7*7, 0) AS weekstart,
         DATEADD(day, DATEDIFF(day, 6, WeddingDate-1) /7*7 + 7, 6) AS WeekEnd

4

นี่คืออีกเวอร์ชันหนึ่ง หากสถานการณ์ของคุณกำหนดให้วันเสาร์เป็นวันที่ 1 ของสัปดาห์และวันศุกร์เป็นวันสุดท้ายของสัปดาห์รหัสด้านล่างจะจัดการสิ่งนั้น:

  DECLARE @myDate DATE = GETDATE()
  SELECT    @myDate,
    DATENAME(WEEKDAY,@myDate),
    DATEADD(DD,-(CHOOSE(DATEPART(dw, @myDate), 1,2,3,4,5,6,0)),@myDate) AS WeekStartDate,
    DATEADD(DD,7-CHOOSE(DATEPART(dw, @myDate), 2,3,4,5,6,7,1),@myDate) AS WeekEndDate

ภาพหน้าจอของแบบสอบถาม


2

ขยายความในคำตอบของ @ Tomalak สูตรนี้ใช้ได้กับวันอื่นที่ไม่ใช่วันอาทิตย์และวันจันทร์ แต่คุณต้องใช้ค่าที่ต่างกันโดยที่ 5 อยู่ วิธีที่จะได้รับคุณค่าที่คุณต้องการคือ

Value Needed = 7 - (Value From Date First Documentation for Desired Day Of Week) - 1

นี่คือลิงค์ไปยังเอกสาร: https://msdn.microsoft.com/en-us/library/ms181598.aspx

และนี่คือตารางที่จัดวางให้คุณ

          | DATEFIRST VALUE |   Formula Value   |   7 - DATEFIRSTVALUE - 1
Monday    | 1               |          5        |   7 - 1- 1 = 5
Tuesday   | 2               |          4        |   7 - 2 - 1 = 4
Wednesday | 3               |          3        |   7 - 3 - 1 = 3
Thursday  | 4               |          2        |   7 - 4 - 1 = 2
Friday    | 5               |          1        |   7 - 5 - 1 = 1
Saturday  | 6               |          0        |   7 - 6 - 1 = 0
Sunday    | 7               |         -1        |   7 - 7 - 1 = -1

แต่คุณไม่จำเป็นต้องจำตารางนั้นและแค่สูตรและจริงๆแล้วคุณสามารถใช้ตารางที่แตกต่างกันเล็กน้อยได้เช่นกันความต้องการหลักคือการใช้ค่าที่จะทำให้ส่วนที่เหลือเป็นจำนวนวันที่ถูกต้อง

นี่คือตัวอย่างการทำงาน:

DECLARE @MondayDateFirstValue INT = 1
DECLARE @FridayDateFirstValue INT = 5
DECLARE @TestDate DATE = GETDATE()

SET @MondayDateFirstValue = 7 - @MondayDateFirstValue - 1
SET @FridayDateFirstValue = 7 - @FridayDateFirstValue - 1

SET DATEFIRST 6 -- notice this is saturday

SELECT 
    DATEADD(DAY, 0 - (@@DATEFIRST + @MondayDateFirstValue + DATEPART(dw,@TestDate)) % 7, @TestDate)  as MondayStartOfWeek
    ,DATEADD(DAY, 6 - (@@DATEFIRST + @MondayDateFirstValue + DATEPART(dw,@TestDate)) % 7, @TestDate) as MondayEndOfWeek
   ,DATEADD(DAY, 0 - (@@DATEFIRST + @FridayDateFirstValue + DATEPART(dw,@TestDate)) % 7, @TestDate)  as FridayStartOfWeek
    ,DATEADD(DAY, 6 - (@@DATEFIRST + @FridayDateFirstValue + DATEPART(dw,@TestDate)) % 7, @TestDate) as FridayEndOfWeek


SET DATEFIRST 2 --notice this is tuesday

SELECT 
    DATEADD(DAY, 0 - (@@DATEFIRST + @MondayDateFirstValue + DATEPART(dw,@TestDate)) % 7, @TestDate)  as MondayStartOfWeek
    ,DATEADD(DAY, 6 - (@@DATEFIRST + @MondayDateFirstValue + DATEPART(dw,@TestDate)) % 7, @TestDate) as MondayEndOfWeek
   ,DATEADD(DAY, 0 - (@@DATEFIRST + @FridayDateFirstValue + DATEPART(dw,@TestDate)) % 7, @TestDate)  as FridayStartOfWeek
    ,DATEADD(DAY, 6 - (@@DATEFIRST + @FridayDateFirstValue + DATEPART(dw,@TestDate)) % 7, @TestDate) as FridayEndOfWeek

วิธีนี้จะไม่เชื่อเรื่องพระเจ้าของการDATEFIRSTตั้งค่าซึ่งเป็นสิ่งที่ฉันต้องการเนื่องจากฉันกำลังสร้างมิติข้อมูลวันที่ที่มีวิธีการหลายสัปดาห์รวมอยู่ด้วย


1

แบบสอบถามด้านล่างนี้จะให้ข้อมูลระหว่างวันเริ่มต้นและจุดสิ้นสุดของสัปดาห์ปัจจุบันโดยเริ่มตั้งแต่วันอาทิตย์ถึงวันเสาร์

SELECT DOB FROM PROFILE_INFO WHERE DAY(DOB) BETWEEN
DAY( CURRENT_DATE() - (SELECT DAYOFWEEK(CURRENT_DATE())-1))
AND
DAY((CURRENT_DATE()+(7 - (SELECT DAYOFWEEK(CURRENT_DATE())) ) ))
AND
MONTH(DOB)=MONTH(CURRENT_DATE())

1

ให้เราแบ่งปัญหาออกเป็นสองส่วน:

1) กำหนดวันในสัปดาห์

DATEPART(dw, ...)ผลตอบแทนหมายเลข 1 ... 7 เมื่อเทียบกับDATEFIRSTการตั้งค่า ( เอกสาร ) ตารางต่อไปนี้สรุปค่าที่เป็นไปได้:

                                                   @@DATEFIRST
+------------------------------------+-----+-----+-----+-----+-----+-----+-----+-----+
|                                    |  1  |  2  |  3  |  4  |  5  |  6  |  7  | DOW |
+------------------------------------+-----+-----+-----+-----+-----+-----+-----+-----+
|  DATEPART(dw, /*Mon*/ '20010101')  |  1  |  7  |  6  |  5  |  4  |  3  |  2  |  1  |
|  DATEPART(dw, /*Tue*/ '20010102')  |  2  |  1  |  7  |  6  |  5  |  4  |  3  |  2  |
|  DATEPART(dw, /*Wed*/ '20010103')  |  3  |  2  |  1  |  7  |  6  |  5  |  4  |  3  |
|  DATEPART(dw, /*Thu*/ '20010104')  |  4  |  3  |  2  |  1  |  7  |  6  |  5  |  4  |
|  DATEPART(dw, /*Fri*/ '20010105')  |  5  |  4  |  3  |  2  |  1  |  7  |  6  |  5  |
|  DATEPART(dw, /*Sat*/ '20010106')  |  6  |  5  |  4  |  3  |  2  |  1  |  7  |  6  |
|  DATEPART(dw, /*Sun*/ '20010107')  |  7  |  6  |  5  |  4  |  3  |  2  |  1  |  7  |
+------------------------------------+-----+-----+-----+-----+-----+-----+-----+-----+

คอลัมน์สุดท้ายมีอุดมคติค่าวันของสัปดาห์สำหรับวันจันทร์ถึงวันอาทิตย์สัปดาห์ที่ผ่านมา * เพียงแค่ดูที่แผนภูมิเราได้สมการต่อไปนี้:

(@@DATEFIRST + DATEPART(dw, SomeDate) - 1 - 1) % 7 + 1

2) คำนวณวันจันทร์และวันอาทิตย์สำหรับวันที่กำหนด

นี่เป็นเรื่องเล็กน้อยด้วยค่าวันในสัปดาห์ นี่คือตัวอย่าง:

WITH TestData(SomeDate) AS (
    SELECT CAST('20001225' AS DATETIME) UNION ALL
    SELECT CAST('20001226' AS DATETIME) UNION ALL
    SELECT CAST('20001227' AS DATETIME) UNION ALL
    SELECT CAST('20001228' AS DATETIME) UNION ALL
    SELECT CAST('20001229' AS DATETIME) UNION ALL
    SELECT CAST('20001230' AS DATETIME) UNION ALL
    SELECT CAST('20001231' AS DATETIME) UNION ALL
    SELECT CAST('20010101' AS DATETIME) UNION ALL
    SELECT CAST('20010102' AS DATETIME) UNION ALL
    SELECT CAST('20010103' AS DATETIME) UNION ALL
    SELECT CAST('20010104' AS DATETIME) UNION ALL
    SELECT CAST('20010105' AS DATETIME) UNION ALL
    SELECT CAST('20010106' AS DATETIME) UNION ALL
    SELECT CAST('20010107' AS DATETIME) UNION ALL
    SELECT CAST('20010108' AS DATETIME) UNION ALL
    SELECT CAST('20010109' AS DATETIME) UNION ALL
    SELECT CAST('20010110' AS DATETIME) UNION ALL
    SELECT CAST('20010111' AS DATETIME) UNION ALL
    SELECT CAST('20010112' AS DATETIME) UNION ALL
    SELECT CAST('20010113' AS DATETIME) UNION ALL
    SELECT CAST('20010114' AS DATETIME)
), TestDataPlusDOW AS (
    SELECT SomeDate, (@@DATEFIRST + DATEPART(dw, SomeDate) - 1 - 1) % 7 + 1 AS DOW
    FROM TestData
)
SELECT
    FORMAT(SomeDate,                            'ddd yyyy-MM-dd') AS SomeDate,
    FORMAT(DATEADD(dd, -DOW + 1, SomeDate),     'ddd yyyy-MM-dd') AS [Monday],
    FORMAT(DATEADD(dd, -DOW + 1 + 6, SomeDate), 'ddd yyyy-MM-dd') AS [Sunday]
FROM TestDataPlusDOW

เอาท์พุต:

+------------------+------------------+------------------+
|  SomeDate        |  Monday          |    Sunday        |
+------------------+------------------+------------------+
|  Mon 2000-12-25  |  Mon 2000-12-25  |  Sun 2000-12-31  |
|  Tue 2000-12-26  |  Mon 2000-12-25  |  Sun 2000-12-31  |
|  Wed 2000-12-27  |  Mon 2000-12-25  |  Sun 2000-12-31  |
|  Thu 2000-12-28  |  Mon 2000-12-25  |  Sun 2000-12-31  |
|  Fri 2000-12-29  |  Mon 2000-12-25  |  Sun 2000-12-31  |
|  Sat 2000-12-30  |  Mon 2000-12-25  |  Sun 2000-12-31  |
|  Sun 2000-12-31  |  Mon 2000-12-25  |  Sun 2000-12-31  |
|  Mon 2001-01-01  |  Mon 2001-01-01  |  Sun 2001-01-07  |
|  Tue 2001-01-02  |  Mon 2001-01-01  |  Sun 2001-01-07  |
|  Wed 2001-01-03  |  Mon 2001-01-01  |  Sun 2001-01-07  |
|  Thu 2001-01-04  |  Mon 2001-01-01  |  Sun 2001-01-07  |
|  Fri 2001-01-05  |  Mon 2001-01-01  |  Sun 2001-01-07  |
|  Sat 2001-01-06  |  Mon 2001-01-01  |  Sun 2001-01-07  |
|  Sun 2001-01-07  |  Mon 2001-01-01  |  Sun 2001-01-07  |
|  Mon 2001-01-08  |  Mon 2001-01-08  |  Sun 2001-01-14  |
|  Tue 2001-01-09  |  Mon 2001-01-08  |  Sun 2001-01-14  |
|  Wed 2001-01-10  |  Mon 2001-01-08  |  Sun 2001-01-14  |
|  Thu 2001-01-11  |  Mon 2001-01-08  |  Sun 2001-01-14  |
|  Fri 2001-01-12  |  Mon 2001-01-08  |  Sun 2001-01-14  |
|  Sat 2001-01-13  |  Mon 2001-01-08  |  Sun 2001-01-14  |
|  Sun 2001-01-14  |  Mon 2001-01-08  |  Sun 2001-01-14  |
+------------------+------------------+------------------+

* สำหรับสัปดาห์อาทิตย์ถึงวันเสาร์คุณต้องปรับสมการเพียงเล็กน้อยเช่นเพิ่ม 1 ที่ไหนสักแห่ง


1

หากวันอาทิตย์ถือเป็นวันเริ่มต้นสัปดาห์นี่คือรหัส

Declare @currentdate date = '18 Jun 2020'

select DATEADD(D, -(DATEPART(WEEKDAY, @currentdate) - 1), @currentdate)

select DATEADD(D, (7 - DATEPART(WEEKDAY, @currentdate)), @currentdate)

0

ฉันเพิ่งเจอกรณีคล้าย ๆ กันนี้ แต่วิธีแก้ปัญหาที่นี่ดูเหมือนจะไม่ช่วยฉัน ฉันจึงพยายามคิดออกด้วยตัวเอง ฉันหาวันที่เริ่มต้นของสัปดาห์เท่านั้นวันที่สิ้นสุดของสัปดาห์ควรเป็นตรรกะที่คล้ายกัน

Select 
      Sum(NumberOfBrides) As [Wedding Count], 
      DATEPART( wk, WeddingDate) as [Week Number],
      DATEPART( year, WeddingDate) as [Year],
      DATEADD(DAY, 1 - DATEPART(WEEKDAY, dateadd(wk, DATEPART( wk, WeddingDate)-1,  DATEADD(yy,DATEPART( year, WeddingDate)-1900,0))), dateadd(wk, DATEPART( wk, WeddingDate)-1, DATEADD(yy,DATEPART( year, WeddingDate)-1900,0))) as [Week Start]

FROM  MemberWeddingDates
Group By DATEPART( year, WeddingDate), DATEPART( wk, WeddingDate)
Order By Sum(NumberOfBrides) Desc

0

คำตอบที่ได้รับการโหวตมากที่สุดใช้ได้ผลดียกเว้นสัปดาห์ที่ 1 และสัปดาห์สุดท้ายของปี ตัวอย่างเช่นถ้าค่าของ WeddingDate คือ '2016/01/01' ผลจะเป็น2015/12/27และ2016/01/02แต่คำตอบที่ถูกต้องคือ2016/01/01และ2016/01/02 2016/01/02

ลองสิ่งนี้:

Select 
  Sum(NumberOfBrides) As [Wedding Count], 
  DATEPART( wk, WeddingDate) as [Week Number],
  DATEPART( year, WeddingDate) as [Year],
  MAX(CASE WHEN DATEPART(WEEK, WeddingDate) = 1 THEN CAST(DATEADD(YEAR, DATEDIFF(YEAR, 0, WeddingDate), 0) AS date) ELSE DATEADD(DAY, 7 * DATEPART(WEEK, WeddingDate), DATEADD(DAY, -(DATEPART(WEEKDAY, DATEADD(YEAR, DATEDIFF(YEAR, 0, WeddingDate), 0)) + 6), DATEADD(YEAR, DATEDIFF(YEAR, 0, WeddingDate), 0))) END) as WeekStart,
  MAX(CASE WHEN DATEPART(WEEK, WeddingDate) = DATEPART(WEEK, DATEADD(DAY, -1, DATEADD(YEAR, DATEDIFF(YEAR, 0, WeddingDate) + 1, 0))) THEN DATEADD(DAY, -1, DATEADD(YEAR, DATEDIFF(YEAR, 0, WeddingDate) + 1, 0)) ELSE DATEADD(DAY, 7 * DATEPART(WEEK, WeddingDate) + 6, DATEADD(DAY, -(DATEPART(WEEKDAY, DATEADD(YEAR, DATEDIFF(YEAR, 0, WeddingDate), 0)) + 6), DATEADD(YEAR, DATEDIFF(YEAR, 0, WeddingDate), 0))) END) as WeekEnd
FROM  MemberWeddingDates
Group By DATEPART( year, WeddingDate), DATEPART( wk, WeddingDate)
Order By Sum(NumberOfBrides) Desc;

ผลลัพธ์ดูเหมือนว่า: ป้อนคำอธิบายภาพที่นี่

ใช้ได้กับทุกสัปดาห์ที่ 1 หรืออื่น ๆ


0

วันที่เริ่มต้นและสิ้นสุดของสัปดาห์จากวันที่สำหรับสูตร Power BI Dax

WeekStartDate = [DateColumn] - (WEEKDAY([DateColumn])-1)
WeekEndDate = [DateColumn] + (7-WEEKDAY([DateColumn]))

0

นี่คือทางออกของฉัน

    ตั้งค่า DATEFIRST 1; / * เปลี่ยนไปใช้ datefirst อื่น * /
    ประกาศ @ วันที่ DATETIME
    SET @date = CAST ('2/6/2019' เป็นวันที่)

    เลือก DATEADD (dd, 0 - (DATEPART (dw, @date) - 1), @ date) [dateFrom], 
            DATEADD (dd, 6 - (DATEPART (dw, @date) - 1), @ date) [dateTo]


0

รับวันที่เริ่มต้นและวันที่สิ้นสุดตามวันที่กำหนดเอง


   DECLARE @Date NVARCHAR(50)='05/19/2019' 
   SELECT
      DATEADD(DAY,CASE WHEN DATEPART(WEEKDAY, @Date)=1 THEN -6 ELSE 2 - DATEPART(WEEKDAY, @Date) END, CAST(@Date AS DATE)) [Week_Start_Date]
     ,DATEADD(DAY,CASE WHEN DATEPART(WEEKDAY, @Date)=1 THEN 0 ELSE  8 - DATEPART(WEEKDAY, @Date) END, CAST(@Date AS DATE)) [Week_End_Date]


แม้ว่ารหัสนี้จะช่วยแก้ปัญหาได้ แต่การอธิบายจะช่วยปรับปรุงคุณภาพของโพสต์ของคุณได้มาก
Shree

0

ฉันมีวิธีอื่นคือเลือกวันเริ่มต้นและวันที่สิ้นสุดของสัปดาห์ปัจจุบัน:

DATEADD (d, - (DATEPART (dw, GETDATE () - 2)), GETDATE ()) คือวันที่เวลาเริ่มต้น

และ

DATEADD (วันที่ 7- (DATEPART (dw, GETDATE () - 1)), GETDATE ()) คือวันที่เวลาสิ้นสุด


0

อีกวิธีในการทำ:

declare @week_number int = 6280 -- 2020-05-07
declare @start_weekday int = 0 -- Monday
declare @end_weekday int = 6 -- next Sunday

select 
    dateadd(week, @week_number, @start_weekday), 
    dateadd(week, @week_number, @end_weekday)

คำอธิบาย:

  • @week_number คือหมายเลขสัปดาห์นับตั้งแต่วันที่เริ่มต้นในปฏิทิน ' 1900-01-01 ' สามารถคำนวณได้ด้วยวิธีนี้:select datediff(week, 0, @wedding_date) as week_number
  • @start_weekday สำหรับวันแรกของสัปดาห์: 0สำหรับวันจันทร์-1ถ้าวันอาทิตย์
  • @end_weekday ของสัปดาห์วันสุดท้าย: 6สำหรับวันอาทิตย์ถัดไป5ถ้าเป็นวันเสาร์
  • dateadd(week, @week_number, @end_weekday): เพิ่มจำนวนสัปดาห์ที่กำหนดและจำนวนวันที่กำหนดลงในวันที่เริ่มต้นของปฏิทิน ' 1900-01-01 '

0

สิ่งนี้ไม่ได้มาจากฉัน แต่มันทำให้งานสำเร็จไม่ว่า:

SELECT DATEADD(wk, -1, DATEADD(DAY, 1-DATEPART(WEEKDAY, GETDATE()), DATEDIFF(dd, 0, GETDATE()))) --first day previous week
SELECT DATEADD(wk, 0, DATEADD(DAY, 1-DATEPART(WEEKDAY, GETDATE()), DATEDIFF(dd, 0, GETDATE()))) --first day current week
SELECT DATEADD(wk, 1, DATEADD(DAY, 1-DATEPART(WEEKDAY, GETDATE()), DATEDIFF(dd, 0, GETDATE()))) --first day next week

SELECT DATEADD(wk, 0, DATEADD(DAY, 0-DATEPART(WEEKDAY, GETDATE()), DATEDIFF(dd, 0, GETDATE()))) --last day previous week
SELECT DATEADD(wk, 1, DATEADD(DAY, 0-DATEPART(WEEKDAY, GETDATE()), DATEDIFF(dd, 0, GETDATE()))) --last day current week
SELECT DATEADD(wk, 2, DATEADD(DAY, 0-DATEPART(WEEKDAY, GETDATE()), DATEDIFF(dd, 0, GETDATE()))) --last day next week

ผมพบว่ามันนี่


-3

ไม่แน่ใจว่าสิ่งนี้มีประโยชน์แค่ไหน แต่ฉันมาที่นี่จากการมองหาโซลูชันบน Netezza SQL และไม่พบวิธีแก้ปัญหาบนสแต็กล้น

สำหรับ IBM netezza คุณจะใช้บางสิ่งบางอย่าง (สำหรับสัปดาห์เริ่มต้นจันทร์อาทิตย์ปลายสัปดาห์) เช่น:

เลือก next_day (WeddingDate, 'SUN') -6 เป็น WeekStart,

next_day (WeddingDate, 'SUN') เป็น WeekEnd


-4

สำหรับ Access Queries คุณสามารถใช้ในรูปแบบด้านล่างเป็นฟิลด์

"FirstDayofWeek:IIf(IsDate([ForwardedForActionDate]),CDate(Format([ForwardedForActionDate],"dd/mm/yyyy"))-(Weekday([ForwardedForActionDate])-1))"

อนุญาตการคำนวณโดยตรง ..

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.