2009-07-10 11 views
288

में सप्ताह का दिन प्राप्त करें यदि मेरे पास दिनांक 01/01/2009 है, तो मैं यह जानना चाहता हूं कि यह किस दिन था। सोमवार, मंगलवार, आदि ...SQL 2005/2008

क्या SQL 2005/2008 में इसके लिए एक अंतर्निहित कार्य है? या मुझे एक सहायक टेबल का उपयोग करने की ज़रूरत है?

+1

यदि आपके पास तिथि भाग के लिए लुकअप वाली तालिका है, तो आपने आमतौर पर कुछ गलत किया है।SQL सर्वर का दिनांक फ़ंक्शन कई और मजबूत है, इसलिए किसी भी डेटा को किसी दिनांक से निकालने के लिए आपको डेटाटाइम कॉलम पर आसानी से किया जा सकता है। –

+4

सहायक टेबल तारीख गणना के लिए बहुत उपयोगी हैं, कैलेंडर सहायक तालिका रखना असामान्य नहीं है ... –

+2

"दिनांक गणना के लिए उपयोगी" अत्यधिक संदिग्ध है। अधिकांश दिनांक गणना किसी भी प्रकार की सहायक तालिका के बिना संभाली जा सकती है और यह भी बेहतर प्रदर्शन करेगी। कुछ मामलों में, एक सादा संख्या तालिका नौकरी करेगी - इसमें वास्तविक तिथियों वाली तालिका की आवश्यकता नहीं है। एकमात्र कारण मैंने देखा है कि वास्तविक कैलेंडर तालिका की आवश्यकता होती है जब नियम किस दिन कार्य दिवस होते हैं और कौन से दिन बहुत जटिल नहीं होते हैं। जो मैंने देखा है, वह लोग अक्सर तारीख सारणी का उपयोग कर रहे हैं क्योंकि वे नहीं जानते कि इसे किसी अन्य तरीके से कैसे किया जाए। फिर उन्हें हर बार तारीख तालिका को पॉप्युलेट करना होता है। बेवकूफ। – ErikE

उत्तर

571

उपयोग DATENAME या DATEPART:

SELECT DATENAME(dw,GETDATE()) -- Friday 
SELECT DATEPART(dw,GETDATE()) -- 6 
+0

thx, मैंने डेटनाम का प्रयास किया था लेकिन डी का इस्तेमाल किया, मुझे एक पूर्णांक वापस दिया। अपेक्षित –

+25

के रूप में काम करता है इसलिए मैं चुनिंदा डेटानाम (सप्ताहांत, getdate()) का उपयोग करना पसंद करता हूं। मुझे याद रखना नहीं है कि सप्ताहांत रिटर्न सप्ताहांत .... जब मैं इसके बजाय "सप्ताहांत" का उपयोग कर सकता हूं। –

+9

कोई भी इस पर चमक रहा है - ध्यान दें कि ** सप्ताह की डिफ़ॉल्ट शुरुआत रविवार ** है। सुरक्षित रूप से –

83

हालांकि SQLMenace के जवाब में स्वीकार कर लिया गया है, वहाँ एक महत्वपूर्ण SET विकल्प आपको

SET DATEFIRST

DATENAME के बारे में पता होना चाहिए होगा सही तिथि नाम वापस करें लेकिन उसी दिन DATEPART मूल्य नहीं है यदि सप्ताह के पहले दिन को नीचे दिखाया गया है।

declare @DefaultDateFirst int 
set @DefaultDateFirst = @@datefirst 
--; 7 First day of week is "Sunday" by default 
select [@DefaultDateFirst] = @DefaultDateFirst 

set datefirst @DefaultDateFirst 
select datename(dw,getdate()) -- Saturday 
select datepart(dw,getdate()) -- 7 

--; Set the first day of week to * TUESDAY * 
--; (some people start their week on Tuesdays...) 
set datefirst 2 
select datename(dw,getdate()) -- Saturday 
--; Returns 5 because Saturday is the 5th day since Tuesday. 
--; Tue 1, Wed 2, Th 3, Fri 4, Sat 5 
select datepart(dw,getdate()) -- 5 <-- It's not 7! 
set datefirst @DefaultDateFirst 
+27

तो निरंतर डेटपर्ट मान प्राप्त करने के लिए, आप '(@@ डेटफर्स्ट - 1 + डेटपार्ट (सप्ताहांत, दिनांक))% 7' करते हैं। रविवार हमेशा शून्य होगा। –

+1

भयानक भयानक यह सामान स्थैतिक है इसलिए आपको मूल क्वेरी का पालन करना होगा, मूल्य बदलें, क्वेरी चलाएं, मूल पैटर्न रीसेट करें –

+0

हाँ, आप सही आदमी हैं, यह एक महत्वपूर्ण नोट है (वाई) –

10

आप DATEPART() और @@datefirst के संयोजन का उपयोग कर सकता है कि किसी निश्चित तिथि के लिए सप्ताह के दिन के लिए एक नियतात्मक मूल्य प्राप्त करने के लिए। अन्यथा सर्वर पर सेटिंग्स पर निर्भर है।

चेक बाहर एक बेहतर समाधान के लिए निम्नलिखित साइट: MS SQL: Day of Week

सप्ताह के दिन तो रेंज में होगा 0 से 6, जहां 0 रविवार है, 1, सोमवार है आदि तो फिर तुम एक का उपयोग कर सकते सही सप्ताह के नाम को वापस करने के लिए सरल केस स्टेटमेंट।

+3

कृपया उत्तर को उत्तर में डाल दें ताकि लोगों को इसे प्राप्त करने के लिए एक लिंक पर क्लिक न करना पड़े। –

+0

इसे सही उत्तर के रूप में स्वीकार किया जाएगा। धन्यवाद। – Juozas

20
SELECT CASE DATEPART(WEEKDAY,GETDATE()) 
    WHEN 1 THEN 'SUNDAY' 
    WHEN 2 THEN 'MONDAY' 
    WHEN 3 THEN 'TUESDAY' 
    WHEN 4 THEN 'WEDNESDAY' 
    WHEN 5 THEN 'THURSDAY' 
    WHEN 6 THEN 'FRIDAY' 
    WHEN 7 THEN 'SATURDAY' 
END 
+22

आपको पता होना चाहिए कि थर्म इसे प्राप्त करने के लिए एक अंतर्निहित कार्य है। 'डेटनाम (dw, getdate()) का चयन करें –

+1

धन्यवाद, फ़ंक्शन में बनाया गया कोड – Sutirth

+5

@ सोहमदासगुप्त की लाइन को कम कर सकता है यह फ़ंक्शन में निर्मित एमएस एसक्यूएल के गैर-अंग्रेज़ी संस्करण के लिए समान परिणाम नहीं देता है। –

3
इस

है मेरी कोड की एक काम की नकल यह, कैसे दिन नाम तारीख से एसक्यूएल में

CREATE Procedure [dbo].[proc_GetProjectDeploymentTimeSheetData] 
@FromDate date, 
@ToDate date 

As 
Begin 
select p.ProjectName + ' (' + st.Time +' '+'-'+' '+et.Time +')' as ProjectDeatils, 
datename(dw,pts.StartDate) as 'Day' 
from 
ProjectTimeSheet pts 
join Projects p on pts.ProjectID=p.ID 
join Timing st on pts.StartTimingId=st.Id 
join Timing et on pts.EndTimingId=et.Id 
where pts.StartDate >= @FromDate 
and pts.StartDate <= @ToDate 
END 

मुबारक कोडिंग .... पुनर्प्राप्त करने के लिए जाँच

+0

टैगिंग को खुश करने के बारे में कैसे? ;) – tamasgal

+0

हा हा हा ...... –

0

आप इस संस्करण उपयोगी मिल सकता है ।

-- Test DATA 
select @@datefirst 
create table #test (datum datetime) 
insert #test values ('2013-01-01') 
insert #test values ('2013-01-02') 
insert #test values ('2013-01-03') 
insert #test values ('2013-01-04') 
insert #test values ('2013-01-05') 
insert #test values ('2013-01-06') 
insert #test values ('2013-01-07') 
insert #test values ('2013-01-08') 
-- Test DATA 

select Substring('Sun,Mon,Tue,Wed,Thu,Fri,Sat,Sun,Mon,Tue,Wed,Thu,Fri,Sat', 
     (DATEPART(WEEKDAY,datum)[email protected]@datefirst-1)*4+1,3),Datum 
     from #test 
+1

यह कोड प्राप्त कर रहा है, और यह क्या कर रहा है या – brewmanz

8

यूरोप:

declare @d datetime; 
set @d=getdate(); 
set @dow=((datepart(dw,@d) + @@DATEFIRST-2) % 7+1); 
+2

प्राप्त करने का प्रयास करने का कोई संकेत नहीं देता है, कृपया अपना कोड क्या करता है और यह प्रश्न का उत्तर कैसे देता है, इसकी व्याख्या शामिल करें। अगर आपको एक कोड स्निपेट उत्तर के रूप में मिलता है, तो आप नहीं जानते कि इसके साथ क्या किया जाए। उत्तर को ओपी और भावी आगंतुकों को उनकी समस्या को डीबग और ठीक करने के तरीके पर मार्गदर्शन देना चाहिए। बताते हुए, आपके कोड के पीछे क्या विचार है, इस मुद्दे को समझने और आपके समाधान को लागू करने या संशोधित करने में काफी मदद करता है। – Palec

5
SQL सर्वर 2012 के साथ

और आगे तुम सिर्फ FORMAT समारोह

SELECT FORMAT(GETDATE(), 'dddd') 
1

का उपयोग आप @@DATEFIRST पर निर्भर करते हैं या DATEPART(weekday, DateColumn) उपयोग करने के लिए नहीं करना चाहते हैं कर सकते हैं, सप्ताह के दिन की गणना करें।

सोमवार आधारित सप्ताह (यूरोप) सबसे सरल है:

SELECT DATEDIFF(day, '17530101', DateColumn) % 7 + 1 AS MondayBasedDay 

रविवार आधारित सप्ताह के लिए (अमेरिका) का उपयोग करें:

SELECT DATEDIFF(day, '17530107', DateColumn) % 7 + 1 AS SundayBasedDay 

यह वापसी काम करने के दिन संख्या (7 करने के लिए 1) कभी जनवरी के बाद से 1 क्रमशः 7 वां, 1753.

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