2009-07-09 4 views
10

मैं इस सप्ताह केवल जोड़ा रिकॉर्ड फिल्टर करने के लिए DATEDIFF समारोह का उपयोग करें:क्या टी-एसक्यूएल डेटाडिफ फ़ंक्शन के लिए सप्ताह की शुरुआत सेट करना संभव है?

DATEDIFF(week, DateCreated, GETDATE()) = 0 

और मैंने देखा कि यह क्या मान लिया है क्या सप्ताह रविवार को शुरू होता है। लेकिन मेरे मामले में मैं सोमवार को सप्ताह की शुरुआत शुरू करना पसंद करूंगा। क्या यह किसी भी तरह टी-एसक्यूएल में संभव है?

धन्यवाद!


अद्यतन:

नीचे दिखा DateDiff @@DATEFIRST चर की जाँच नहीं करता क्या तो मैं एक और समाधान की जरूरत है एक उदाहरण है।

SET DATEFIRST 1; 

SELECT 
    DateCreated, 
    DATEDIFF(week, DateCreated, CAST('20090725' AS DATETIME)) AS D25, 
    DATEDIFF(week, DateCreated, CAST('20090726' AS DATETIME)) AS D26 
FROM 
(
    SELECT CAST('20090724' AS DATETIME) AS DateCreated 
    UNION 
    SELECT CAST('20090725' AS DATETIME) AS DateCreated 
) AS T 

आउटपुट:

DateCreated    D25   D26 
----------------------- ----------- ----------- 
2009-07-24 00:00:00.000 0   1 
2009-07-25 00:00:00.000 0   1 

(2 row(s) affected) 

26 जुला 2009 रविवार है, और मैं DateDiff तीसरे स्तंभ में भी रिटर्न 0 चाहते हैं।

+0

यह जांचने के लिए खेद है कि डेटफिस्ट को डेटीफ द्वारा चेक किया गया था, जो अनुमान लगाएगा, मैंने इसे जवाब देने के लिए अपना उत्तर अपडेट कर दिया है। – Tetraneutron

उत्तर

19

हाँ, यह संभव से

SET DATEFIRST 1; -- Monday 

http://msdn.microsoft.com/en-us/library/ms181598.aspx

यह DateDiff प्रकट होता है Datefirst सम्मान नहीं करता है, तो यह तो

से इस

create table #testDates (id int identity(1,1), dateAdded datetime) 
insert into #testDates values ('2009-07-09 15:41:39.510') -- thu 
insert into #testDates values ('2009-07-06 15:41:39.510') -- mon 
insert into #testDates values ('2009-07-05 15:41:39.510') -- sun 
insert into #testDates values ('2009-07-04 15:41:39.510') -- sat 

SET DATEFIRST 7 -- Sunday (Default 
select * from #testdates where datediff(ww, DATEADD(dd,[email protected]@datefirst,dateadded), DATEADD(dd,[email protected]@datefirst,getdate())) = 0 
SET DATEFIRST 1 -- Monday 
select * from #testdates where datediff(ww, DATEADD(dd,[email protected]@datefirst,dateadded), DATEADD(dd,[email protected]@datefirst,getdate())) = 0 

चोरी की तरह इसे चलाने करते हैं

http://social.msdn.microsoft.com/Forums/en-US/transactsql/thread/8cc3493a-7ae5-4759-ab2a-e7683165320b

+1

एसक्यूएल सर्वर वास्तव में ** DATEFIRST ** वैरिएबल वैल्यू पर विचार नहीं करता है, एमएसडीएन डॉक्स से: _Specifying SET DATEFIRST का DATEDIFF पर कोई प्रभाव नहीं पड़ता है। DATEDIFF सप्ताह को सप्ताह के पहले दिन के रूप में कार्य करता है ताकि यह सुनिश्चित किया जा सके कि फ़ंक्शन निर्धारक है ._ अच्छा कामकाज! :) – Rynkadink

संबंधित मुद्दे