अगर मेरे पास 01/01/2009 की तारीख है, तो मैं यह जानना चाहता हूं कि यह सोमवार, मंगलवार, आदि किस दिन था ...
SQL Server 2005/2008 में इसके लिए कोई अंतर्निहित कार्य है? या क्या मुझे एक सहायक तालिका का उपयोग करने की आवश्यकता है?
अगर मेरे पास 01/01/2009 की तारीख है, तो मैं यह जानना चाहता हूं कि यह सोमवार, मंगलवार, आदि किस दिन था ...
SQL Server 2005/2008 में इसके लिए कोई अंतर्निहित कार्य है? या क्या मुझे एक सहायक तालिका का उपयोग करने की आवश्यकता है?
जवाबों:
SELECT DATENAME(dw,GETDATE()) -- Friday
SELECT DATEPART(dw,GETDATE()) -- 6
भले ही SQLMenace का उत्तर स्वीकार कर लिया गया हो, लेकिन एक महत्वपूर्ण SET
विकल्प है जिससे आपको अवगत होना चाहिए
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
( @@datefirst - 1 + datepart(weekday, thedate) ) % 7
। रविवार हमेशा शून्य रहेगा।
DayOfWeek
गणन है DayOfWeek.Sunday
के एक मूल्य के साथ ... 0
। तो, चाहे जो DateFirst
भी हो, एक अनुपचारित SQL- लौटाया गया WEEKDAY
मान कभी भी .NET समकक्ष के अनुकूल नहीं होगा। Yay, Microsoft।
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
select datename(dw,getdate())
किसी दिए गए दिनांक के लिए सप्ताह के दिन के लिए एक निर्धारक मूल्य प्राप्त करने के लिए आप DATEPART () और @@ डेटफ़र्स्ट के संयोजन का उपयोग कर सकते हैं । अन्यथा आपका सर्वर पर सेटिंग्स पर निर्भर है।
बेहतर समाधान के लिए निम्न साइट देखें: MS SQL: सप्ताह का दिन
सप्ताह का दिन फिर 0 से 6 की सीमा में होगा, जहां 0 रविवार, 1 सोमवार है, आदि। फिर आप सप्ताह के सही नाम को वापस करने के लिए एक साधारण केस स्टेटमेंट का उपयोग कर सकते हैं।
यूरोप:
declare @d datetime;
set @d=getdate();
set @dow=((datepart(dw,@d) + @@DATEFIRST-2) % 7+1);
SQL सर्वर 2012 और उसके बाद आप FORMAT
फ़ंक्शन का उपयोग कर सकते हैं
SELECT FORMAT(GETDATE(), 'dddd')
यह मेरे कोड की एक कार्यशील प्रतिलिपि है, यह जांचें कि कैसे sql में दिनांक से दिन का नाम पुनर्प्राप्त किया जाए
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
यदि आप निर्भर @@DATEFIRST
या उपयोग नहीं करना चाहते हैं DATEPART(weekday, DateColumn)
, तो सप्ताह के दिन की गणना स्वयं करें।
सोमवार आधारित सप्ताह (यूरोप) के लिए सबसे सरल है:
SELECT DATEDIFF(day, '17530101', DateColumn) % 7 + 1 AS MondayBasedDay
रविवार आधारित सप्ताह (अमेरिका) के लिए:
SELECT DATEDIFF(day, '17530107', DateColumn) % 7 + 1 AS SundayBasedDay
यह 1 जनवरी से सप्ताहिक संख्या (1 से 7) क्रमशः 7 जनवरी, 1753 को लौटाता है।
आप उपयोग कर सकते हैं DATEPART(dw, GETDATE())
लेकिन इस बात से अवगत रहें कि परिणाम SQL सर्वर सेटिंग @@DATEFIRST
मान पर निर्भर करेगा जो कि सप्ताह की सेटिंग का पहला दिन है (यूरोप में डिफ़ॉल्ट मान 7 जो कि रविवार है)।
यदि आप सप्ताह के पहले दिन को दूसरे मूल्य में बदलना चाहते हैं, तो आप उपयोग कर सकते हैं SET DATEFIRST
लेकिन यह आपके क्वेरी सत्र में हर जगह प्रभावित हो सकता है जो आप नहीं चाहते हैं।
वैकल्पिक तरीका पैरामीटर के रूप में सप्ताह के मूल्य के पहले दिन को स्पष्ट रूप से निर्दिष्ट करना है और @@DATEFIRST
सेटिंग पर निर्भर करता है । आप इसे प्राप्त करने के लिए निम्न सूत्र का उपयोग कर सकते हैं:
(DATEPART(dw, GETDATE()) + @@DATEFIRST + 6 - @WeekStartDay) % 7 + 1
जहां @WeekStartDay
सप्ताह आप अपने सिस्टम के लिए चाहते हैं के पहले दिन (1 से 7 जो सोमवार से रविवार तक का अर्थ है) है।
मैंने इसे नीचे दिए गए फ़ंक्शन में लपेट दिया है ताकि हम इसे आसानी से पुन: उपयोग कर सकें:
CREATE FUNCTION [dbo].[GetDayInWeek](@InputDateTime DATETIME, @WeekStartDay INT)
RETURNS INT
AS
BEGIN
--Note: @WeekStartDay is number from [1 - 7] which is from Monday to Sunday
RETURN (DATEPART(dw, @InputDateTime) + @@DATEFIRST + 6 - @WeekStartDay) % 7 + 1
END
उदाहरण उपयोग:
GetDayInWeek('2019-02-04 00:00:00', 1)
यह निम्नलिखित (लेकिन SQL सर्वर DATEFIRST सेटिंग से स्वतंत्र) के बराबर है:
SET DATEFIRST 1
DATEPART(dw, '2019-02-04 00:00:00')
आपको यह संस्करण उपयोगी लग सकता है।
-- 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)+@@datefirst-1)*4+1,3),Datum
from #test