আমার যদি 01/01/2009 তারিখ থাকে তবে আমি জানতে চাই যে এটি কোন দিন ছিল, যেমন সোমবার, মঙ্গলবার ইত্যাদি ...
এসকিউএল সার্ভার 2005/2008 এ এর জন্য কি কোনও অন্তর্নির্মিত ফাংশন রয়েছে? বা আমার একটি সহায়ক টেবিল ব্যবহার করা উচিত?
আমার যদি 01/01/2009 তারিখ থাকে তবে আমি জানতে চাই যে এটি কোন দিন ছিল, যেমন সোমবার, মঙ্গলবার ইত্যাদি ...
এসকিউএল সার্ভার 2005/2008 এ এর জন্য কি কোনও অন্তর্নির্মিত ফাংশন রয়েছে? বা আমার একটি সহায়ক টেবিল ব্যবহার করা উচিত?
উত্তর:
ব্যবহার করুন DATENAME
বা DATEPART
:
SELECT DATENAME(dw,GETDATE()) -- Friday
SELECT DATEPART(dw,GETDATE()) -- 6
এসকিউএলমেনিসের উত্তর গৃহীত হলেও, 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
, একটি চিকিত্সাবিহীন এসকিউএল-ফেরত WEEKDAY
মান কখনই নেট নেট অংশের সাথে সামঞ্জস্য হয় না। ইয়ে, মাইক্রোসফ্ট।
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())
নির্দিষ্ট তারিখের জন্য সপ্তাহের দিনের জন্য একটি নির্বিচার মান পেতে আপনি তারিখ পার্ট () এবং @@ তারিখের প্রথমটির সংমিশ্রণটি ব্যবহার করতে পারেন । অন্যথায় সার্ভারের সেটিংসের উপর আপনার নির্ভরশীল।
আরও ভাল সমাধানের জন্য নিম্নলিখিত সাইটটি দেখুন: এমএস এসকিউএল: সপ্তাহের দিন
সপ্তাহের দিনটি 0 থেকে 6 এর মধ্যে থাকবে যেখানে 0 রবিবার, 1 সোমবার ইত্যাদি, তারপরে আপনি সপ্তাহের সঠিক নামটি ফিরিয়ে দিতে একটি সাধারণ কেস স্টেটমেন্ট ব্যবহার করতে পারেন।
ইউরোপ:
declare @d datetime;
set @d=getdate();
set @dow=((datepart(dw,@d) + @@DATEFIRST-2) % 7+1);
এসকিউএল সার্ভারের সাথে 2012 এবং এর পরে আপনি FORMAT
ফাংশনটি ব্যবহার করতে পারেন
SELECT FORMAT(GETDATE(), 'dddd')
এটি আমার কোডের একটি কার্যকরী অনুলিপি এটি পরীক্ষা করে দেখুন, কীভাবে দিনের নাম থেকে এসকিএল এ পুনরুদ্ধার করা যায়
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())
তবে সচেতন হন যে ফলাফলটি এসকিউএল সার্ভার সেটিং @@DATEFIRST
মানের উপর নির্ভর করবে যা সপ্তাহের প্রথম সেটিংয়ের (ইউরোপের ডিফল্ট মান which যা রবিবারে)।
আপনি যদি সপ্তাহের প্রথম দিনটিকে অন্য কোনও মানতে পরিবর্তন করতে চান তবে আপনি ব্যবহার করতে পারেন 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)
এটি অনুসরণ করার সমান (তবে এসকিউএল সার্ভার 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