আমি কীভাবে ইউটিসি এবং স্থানীয় সময়ের মধ্যে ডিএসটি এর আগে বা তার পরে থাকা তারিখের জন্য সঠিক অফসেট পেতে পারি?


29

আমি বর্তমানে ইউটিসির ডেটটাইম থেকে স্থানীয় তারিখ সময় পেতে নিম্নলিখিতটি ব্যবহার করি:

SET @offset = DateDiff(minute, GetUTCDate(), GetDate())
SET @localDateTime = DateAdd(minute, @offset, @utcDateTime)

আমার সমস্যাটি হ'ল যদি দিবালোকের সঞ্চয় সময় হয় GetUTCDate()এবং এর মধ্যে ঘটে @utcDateTimeতবে @localDateTimeশেষ হয় এক ঘন্টা বন্ধ।

বর্তমান তারিখ নয় এমন তারিখের জন্য কি ইউটিসি থেকে স্থানীয় সময়ে রূপান্তর করার কোনও সহজ উপায় আছে?

আমি এসকিউএল সার্ভার 2005 ব্যবহার করছি

উত্তর:


18

কোনও অ-বর্তমান ইউটিসি তারিখকে স্থানীয় সময় রূপান্তর করার সর্বোত্তম উপায় হ'ল সিএলআর ব্যবহার করা। কোড নিজেই সহজ; কঠিন অংশটি সাধারণত মানুষকে বোঝায় যে সিএলআর খাঁটি মন্দ বা ভীতিজনক নয় ...

অনেক উদাহরণের একটির জন্য, এই বিষয়টিতে হর্ষ চাওলার ব্লগ পোস্টটি দেখুন

দুর্ভাগ্যক্রমে, এমন কোনও অন্তর্নির্মিত কিছুই নেই যা এই ধরণের রূপান্তর পরিচালনা করতে পারে, সিএলআর ভিত্তিক সমাধানগুলির জন্য সংরক্ষণ করতে পারে। আপনি একটি টি-এসকিউএল ফাংশন লিখতে পারেন যা এটির মতো কিছু করে, তবে আপনাকে নিজেরাই তারিখ-পরিবর্তন যুক্তিটি নিজে প্রয়োগ করতে হবে, এবং আমি এটি কল্পনা করতাম সহজ নয়।


সময়ের সাথে সাথে আঞ্চলিক পরিবর্তনের প্রকৃত জটিলতা দেওয়া, খাঁটি টি-এসকিউএলে এটি চেষ্টা করা "স্থিরভাবে সহজ নয়" বলে সম্ভবত এটি আখ্যায়িত করছে ;-)। হ্যাঁ, এসকিউএলসিএলআরই এই অপারেশনটি সম্পাদন করার একমাত্র নির্ভরযোগ্য এবং দক্ষ উপায় efficient তার জন্য +1। এফওয়াইআই: লিঙ্কযুক্ত ব্লগ পোস্টটি কার্যকরীভাবে সঠিক তবে সেরা অনুশীলনগুলি অনুসরণ করে না তাই দুর্ভাগ্যক্রমে অক্ষম। ইউটিসি এবং সার্ভার স্থানীয় সময় মধ্যে রূপান্তরের জন্য কার্যাবলী পাওয়া যায় এসকিউএল # (যা আমি লেখক নই), কিন্তু গ্রন্থাগার না মুক্ত সংস্করণ হবে।
সলোমন রুটজকি

1
এটি যুক্ত করা আবশ্যক যখন সিএলআর খারাপ হয়ে যায় WITH PERMISSION_SET = UNSAFE। কিছু পরিবেশ এডাব্লুএস আরডিএসের মতো এটির অনুমতি দেয় না। এবং এটি, ভাল, অনিরাপদ। দুর্ভাগ্যক্রমে, কোনও নেট নেট জোন সম্পূর্ণ বাস্তবায়ন নেই যা unsafeঅনুমতি ব্যতীত ব্যবহারযোগ্য । দেখুন এখানে এবং এখানে
ফ্রেডেরিক

15

মাইক্রোসফ্ট এসকিউএল সার্ভারে ডেটটাইম এবং টাইমজোন হ্যান্ডলিংয়ের সাথে লড়াই করা যে কোনও ব্যক্তিকে সহায়তা করতে আমি কোডপ্লেক্সে টি-এসকিউএল টুলবক্স প্রকল্পটি বিকাশ ও প্রকাশ করেছি । এটি ওপেন সোর্স এবং ব্যবহারের জন্য সম্পূর্ণ বিনামূল্যে।

এটি বাক্সের বাইরে প্রাক-ভরাট কনফিগারেশন টেবিলের পাশাপাশি প্লেইন টি-এসকিউএল (কোনও সিএলআর নেই) ব্যবহার করে সহজ ডেটটাইম রূপান্তর ইউডিএফ সরবরাহ করে। এবং এটিতে সম্পূর্ণ ডিএসটি (দিবালোক সংরক্ষণের সময়) সমর্থন রয়েছে।

সমস্ত সমর্থিত টাইমজোনগুলির একটি তালিকা "তারিখটাইমUtil.Timezone" (টি-এসকিউএল সরঞ্জামবক্স ডাটাবেসের মধ্যে সরবরাহ করা) সারণীতে পাওয়া যাবে।

আপনার উদাহরণে, আপনি নিম্নলিখিত নমুনা ব্যবহার করতে পারেন:

SELECT [DateTimeUtil].[UDF_ConvertUtcToLocalByTimezoneIdentifier] (
    'W. Europe Standard Time', -- the target local timezone
    '2014-03-30 00:55:00' -- the original UTC datetime you want to convert
)

এটি রূপান্তরিত স্থানীয় তারিখের মানটি ফিরিয়ে দেবে।

দুর্ভাগ্যক্রমে, এটি এসকিউএল সার্ভার ২০০৮ বা তারপরে কেবল নতুন ডেটা টাইপের কারণে (DATE, TIME, DATETIME2) সমর্থিত। তবে সম্পূর্ণ উত্স কোড সরবরাহ করার সাথে সাথে আপনি সহজেই টেবিলগুলি এবং ইউডিএফগুলিকে DATETIME দ্বারা প্রতিস্থাপন করে সামঞ্জস্য করতে পারেন। আমার পরীক্ষার জন্য এমএসএসকিউএল 2005 নেই তবে এটি এমএসএসকিউএল 2005 এর সাথেও কাজ করা উচিত work প্রশ্নের ক্ষেত্রে, কেবল আমাকে জানান let


12

আমি সর্বদা এই টিএসকিউএল কমান্ডটি ব্যবহার করি।

-- the utc value 
declare @utc datetime = '20/11/2014 05:14'

-- the local time

select DATEADD(hh, DATEDIFF(hh, getutcdate(), getdate()), @utc)

এটি খুব সহজ এবং এটি কাজটি করে।


2
এমন সময় অঞ্চলগুলি রয়েছে যা ইউটিসি থেকে পুরো ঘন্টা অফসেট নয় তাই এই তারিখ পার্টটি ব্যবহার করা আপনার সমস্যার কারণ হতে পারে।
মাইকেল গ্রিন

4
মাইকেল গ্রিনের মন্তব্য সম্পর্কে, আপনি ইলেক্ট ডেটএডডি (মিনিট, ডেটডিফ) (মিনিট, গেটসট্রেট (), গেট আপডেট ()), @ ইউটিসি) এ পরিবর্তন করে সমস্যার সমাধান করতে পারেন।
ব্যবহারকারী

4
এটি কেবলমাত্র বর্তমান সময়টি ডিএসটি কিনা তা নির্ধারণ করার সময় কার্যকর হয় না, তারপরে এমন কোনও সময়ের তুলনা করুন যা ডিএসটি হতে পারে বা না। ইউকেতে আপনার উপরের উদাহরণ কোড এবং তারিখের সময়টি ব্যবহার করে বর্তমানে আমাকে বলেছে যে এটি সকাল :14:৪৪ হওয়া উচিত, তবে নভেম্বর ডিএসটি-র বাইরে থাকায় এটি GMT এবং UTC এর সাথে মিলিত হওয়ার সময় সকাল 5:14 হওয়া উচিত।
ম্যাট

যদিও আমি সম্মতি দিচ্ছি এটি প্রকৃত প্রশ্নের সমাধান করে না, যতদূর এই উত্তরটির সাথে সম্পর্কিত আমি মনে করি নিম্নলিখিতগুলি আরও ভাল: ডেটএইডডিএড নির্বাচন করুন (মিনিট, তারিখ পার্ট (টিজফসেট, সিডসেট্যাটাইমফফসেট ()), @ ইউটিসি)
ইমন

@ লুডো বার্নার্টস: প্রথম মিলিসেকেন্ড ব্যবহার করুন, দ্বিতীয়: এটি কাজ করে না কারণ ইউটিসি অফসেটটি আজ একটি নির্দিষ্ট সময়ে ইউটিসি-অফসেটের চেয়ে আলাদা হতে পারে (দিবালোক সংরক্ষণ - গ্রীষ্মে বনাম শীতের সময়) ...
চৌম্বক

11

আমি স্ট্যাক ওভারফ্লোতে এই উত্তরটি পেয়েছি যা একটি ব্যবহারকারী সংজ্ঞায়িত ফাংশন সরবরাহ করে যা তারিখের সময়গুলি সঠিকভাবে অনুবাদ করে বলে মনে হয়

একমাত্র জিনিস আপনি পরিবর্তন প্রয়োজন @offsetটাইমজোন এসকিউএল এই ফাংশন চলমান সার্ভারের অফসেট সেট করতে উপরের পরিবর্তনশীল। আমার ক্ষেত্রে, আমাদের এসকিউএল সার্ভারটি EST ব্যবহার করে, যা GMT - 5

এটি নিখুঁত নয় এবং সম্ভবত অর্ধ ঘন্টা বা 15-মিনিটের টিজেড অফসেট রয়েছে এমন অনেক ক্ষেত্রেই এটি কাজ করবে না (যাদের জন্য আমি কেভিনের সুপারিশের মতো সিএলআর ফাংশনটি প্রস্তাব করব ), তবে এটি উত্তরের বেশিরভাগ জেনেরিক সময় অঞ্চলগুলির জন্য যথেষ্ট ভাল কাজ করে আমেরিকা।

CREATE FUNCTION [dbo].[UDTToLocalTime](@UDT AS DATETIME)  
RETURNS DATETIME
AS
BEGIN 
--====================================================
--Set the Timezone Offset (NOT During DST [Daylight Saving Time])
--====================================================
DECLARE @Offset AS SMALLINT
SET @Offset = -5

--====================================================
--Figure out the Offset Datetime
--====================================================
DECLARE @LocalDate AS DATETIME
SET @LocalDate = DATEADD(hh, @Offset, @UDT)

--====================================================
--Figure out the DST Offset for the UDT Datetime
--====================================================
DECLARE @DaylightSavingOffset AS SMALLINT
DECLARE @Year as SMALLINT
DECLARE @DSTStartDate AS DATETIME
DECLARE @DSTEndDate AS DATETIME
--Get Year
SET @Year = YEAR(@LocalDate)

--Get First Possible DST StartDay
IF (@Year > 2006) SET @DSTStartDate = CAST(@Year AS CHAR(4)) + '-03-08 02:00:00'
ELSE              SET @DSTStartDate = CAST(@Year AS CHAR(4)) + '-04-01 02:00:00'
--Get DST StartDate 
WHILE (DATENAME(dw, @DSTStartDate) <> 'sunday') SET @DSTStartDate = DATEADD(day, 1,@DSTStartDate)


--Get First Possible DST EndDate
IF (@Year > 2006) SET @DSTEndDate = CAST(@Year AS CHAR(4)) + '-11-01 02:00:00'
ELSE              SET @DSTEndDate = CAST(@Year AS CHAR(4)) + '-10-25 02:00:00'
--Get DST EndDate 
WHILE (DATENAME(dw, @DSTEndDate) <> 'sunday') SET @DSTEndDate = DATEADD(day,1,@DSTEndDate)

--Get DaylightSavingOffset
SET @DaylightSavingOffset = CASE WHEN @LocalDate BETWEEN @DSTStartDate AND @DSTEndDate THEN 1 ELSE 0 END

--====================================================
--Finally add the DST Offset 
--====================================================
RETURN DATEADD(hh, @DaylightSavingOffset, @LocalDate)
END



GO

4

এসকিউএল সার্ভার 2016+ এর জন্য, আপনি টাইম জোনটি ব্যবহার করতে পারেন । এটি দিনের আলোর সাশ্রয়ের সময়টি স্বয়ংক্রিয়ভাবে পরিচালনা করবে ।



3

স্ট্যাক ওভারফ্লোতে জিজ্ঞাসা করা একই জাতীয় প্রশ্নের বেশ কয়েকটি ভাল উত্তর রয়েছে । আমি ডেটা রূপান্তর পরামর্শদাতার দ্বারা সৃষ্ট জগাখিচুড়ি পরিষ্কার করতে বব অ্যালব্রাইটের দ্বিতীয় উত্তর থেকে একটি টি-এসকিউএল পদ্ধতির সাহায্যে ঘায়েল করেছি

এটি আমাদের প্রায় সমস্ত ডেটার জন্য কাজ করেছিল, তবে পরে আমি বুঝতে পেরেছিলাম যে তার অ্যালগরিদম কেবল 5 এপ্রিল 1988 তারিখের জন্য কাজ করে এবং 1940 এর দশকের আমাদের কিছু তারিখ ছিল যা এখনও সঠিকভাবে রূপান্তরিত হয়নি। স্থানীয় সময় UTCথেকে জাভা এপিআই রূপান্তর করতে জাভা এপিআই ব্যবহার করে এমন একটি তৃতীয় পক্ষের প্রোগ্রামে একটি অ্যালগরিদমের সাথে সীমাবদ্ধ রাখতে আমাদের শেষ পর্যন্ত আমাদের এসকিউএল সার্ভার ডাটাবেসে তারিখগুলি প্রয়োজন neededUTC

আমি CLRউদাহরণ উপরে কেভিন Feasel এর উত্তরে হর্ষ চাওলা উদাহরণ ব্যবহার করে, এবং আমি এটা একটি সমাধান, জাভা ব্যবহার করে যেহেতু আমাদের সামনে শেষ করতে জাভা ব্যবহার সাথে তুলনা করতে চাই UTCস্থানীয় সময় রূপান্তর করা হয়।

উইকিপিডিয়ায় ১৯৮7 সালের আগে 8 টি পৃথক সংবিধানের সংশোধনী উল্লেখ করা হয়েছে যার মধ্যে সময় অঞ্চল সংশোধন জড়িত রয়েছে এবং এর মধ্যে অনেকগুলিই বিভিন্ন রাজ্যে খুব স্থানীয়ভাবে স্থান পেয়েছে, তাই সিএলআর এবং জাভা তাদের আলাদাভাবে ব্যাখ্যা করতে পারে এমন একটি সুযোগ রয়েছে। আপনার ফ্রন্ট-এন্ড অ্যাপ্লিকেশন কোডটি কি ডটনেট বা জাভা ব্যবহার করে, বা 1987 সালের তারিখগুলি কি আপনার জন্য কোনও সমস্যা?


2

আপনি সহজেই এটি একটি সিএলআর সজ্জিত পদ্ধতি দ্বারা করতে পারেন।

[SqlFunction]
public static SqlDateTime ToLocalTime(SqlDateTime UtcTime, SqlString TimeZoneId)
{
    if (UtcTime.IsNull)
        return UtcTime;

    var timeZone = TimeZoneInfo.FindSystemTimeZoneById(TimeZoneId.Value);
    var localTime = TimeZoneInfo.ConvertTimeFromUtc(UtcTime.Value, timeZone);
    return new SqlDateTime(localTime);
}

উপলভ্য টাইমজোনগুলি আপনি একটি টেবিলে সংরক্ষণ করতে পারেন:

CREATE TABLE TimeZones
(
    TimeZoneId NVARCHAR(32) NOT NULL CONSTRAINT PK_TimeZones PRIMARY KEY,
    DisplayName NVARCHAR(64) NOT NULL,
    SupportsDaylightSavingTime BIT NOT NULL,
)

এবং এই সঞ্চিত পদ্ধতিটি আপনার সার্ভারে সম্ভাব্য সময় অঞ্চলগুলির সাথে টেবিলটি পূরণ করবে।

public partial class StoredProcedures
{
    [SqlProcedure]
    public static void PopulateTimezones()
    {
        using (var sql = new SqlConnection("Context Connection=True"))
        {
            sql.Open();

            using (var cmd = sql.CreateCommand())
            {
                cmd.CommandText = "DELETE FROM TimeZones";
                cmd.ExecuteNonQuery();

                cmd.CommandText = "INSERT INTO [dbo].[TimeZones]([TimeZoneId], [DisplayName], [SupportsDaylightSavingTime]) VALUES(@TimeZoneId, @DisplayName, @SupportsDaylightSavingTime);";
                var Id = cmd.Parameters.Add("@TimeZoneId", SqlDbType.NVarChar);
                var DisplayName = cmd.Parameters.Add("@DisplayName", SqlDbType.NVarChar);
                var SupportsDaylightSavingTime = cmd.Parameters.Add("@SupportsDaylightSavingTime", SqlDbType.Bit);

                foreach (var zone in TimeZoneInfo.GetSystemTimeZones())
                {
                    Id.Value = zone.Id;
                    DisplayName.Value = zone.DisplayName;
                    SupportsDaylightSavingTime.Value = zone.SupportsDaylightSavingTime;

                    cmd.ExecuteNonQuery();
                }
            }
        }
    }
}

এটি যুক্ত করা আবশ্যক যখন সিএলআর খারাপ হয়ে যায় WITH PERMISSION_SET = UNSAFE। কিছু পরিবেশ এডাব্লুএস আরডিএসের মতো এটির অনুমতি দেয় না। এবং এটি, ভাল, অনিরাপদ। দুর্ভাগ্যক্রমে, কোনও নেট নেট জোন সম্পূর্ণ বাস্তবায়ন নেই যা unsafeঅনুমতি ব্যতীত ব্যবহারযোগ্য । দেখুন এখানে এবং এখানে
ফ্রেডেরিক

2

এসকিউএল সার্ভার সংস্করণ 2016 একবার এবং সবার জন্য এই সমস্যাটি সমাধান করবে । পূর্ববর্তী সংস্করণগুলির জন্য একটি সিএলআর সমাধান সম্ভবত সবচেয়ে সহজ। অথবা কোনও নির্দিষ্ট ডিএসটি নিয়মের জন্য (কেবল মার্কিন যুক্তরাষ্ট্রে) একটি টি-এসকিউএল ফাংশন তুলনামূলক সহজ হতে পারে।

তবে, আমি মনে করি একটি জেনেরিক টি-এসকিউএল সমাধান সম্ভবত সম্ভব হতে পারে। যতক্ষণ xp_regreadকাজ হয় ততক্ষণ চেষ্টা করে দেখুন:

CREATE TABLE #tztable (Value varchar(50), Data binary(56));
DECLARE @tzname varchar(150) = 'SYSTEM\CurrentControlSet\Control\TimeZoneInformation'
EXEC master.dbo.xp_regread 'HKEY_LOCAL_MACHINE', @tzname, 'TimeZoneKeyName', @tzname OUT;
SELECT @tzname = 'SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\' + @tzname
INSERT INTO #tztable
EXEC master.dbo.xp_regread 'HKEY_LOCAL_MACHINE', @tzname, 'TZI';
SELECT                                                                                  -- See http://msdn.microsoft.com/ms725481
 CAST(CAST(REVERSE(SUBSTRING(Data,  1, 4)) AS binary(4))      AS int) AS BiasMinutes,   -- UTC = local + bias: > 0 in US, < 0 in Europe!
 CAST(CAST(REVERSE(SUBSTRING(Data,  5, 4)) AS binary(4))      AS int) AS ExtraBias_Std, --   0 for most timezones
 CAST(CAST(REVERSE(SUBSTRING(Data,  9, 4)) AS binary(4))      AS int) AS ExtraBias_DST, -- -60 for most timezones: DST makes UTC 1 hour earlier
 -- When DST ends:
 CAST(CAST(REVERSE(SUBSTRING(Data, 13, 2)) AS binary(2)) AS smallint) AS StdYear,       -- 0 = yearly (else once)
 CAST(CAST(REVERSE(SUBSTRING(Data, 15, 2)) AS binary(2)) AS smallint) AS StdMonth,      -- 0 = no DST
 CAST(CAST(REVERSE(SUBSTRING(Data, 17, 2)) AS binary(2)) AS smallint) AS StdDayOfWeek,  -- 0 = Sunday to 6 = Saturday
 CAST(CAST(REVERSE(SUBSTRING(Data, 19, 2)) AS binary(2)) AS smallint) AS StdWeek,       -- 1 to 4, or 5 = last <DayOfWeek> of <Month>
 CAST(CAST(REVERSE(SUBSTRING(Data, 21, 2)) AS binary(2)) AS smallint) AS StdHour,       -- Local time
 CAST(CAST(REVERSE(SUBSTRING(Data, 23, 2)) AS binary(2)) AS smallint) AS StdMinute,
 CAST(CAST(REVERSE(SUBSTRING(Data, 25, 2)) AS binary(2)) AS smallint) AS StdSecond,
 CAST(CAST(REVERSE(SUBSTRING(Data, 27, 2)) AS binary(2)) AS smallint) AS StdMillisec,
 -- When DST starts:
 CAST(CAST(REVERSE(SUBSTRING(Data, 29, 2)) AS binary(2)) AS smallint) AS DSTYear,       -- See above
 CAST(CAST(REVERSE(SUBSTRING(Data, 31, 2)) AS binary(2)) AS smallint) AS DSTMonth,
 CAST(CAST(REVERSE(SUBSTRING(Data, 33, 2)) AS binary(2)) AS smallint) AS DSTDayOfWeek,
 CAST(CAST(REVERSE(SUBSTRING(Data, 35, 2)) AS binary(2)) AS smallint) AS DSTWeek,
 CAST(CAST(REVERSE(SUBSTRING(Data, 37, 2)) AS binary(2)) AS smallint) AS DSTHour,
 CAST(CAST(REVERSE(SUBSTRING(Data, 39, 2)) AS binary(2)) AS smallint) AS DSTMinute,
 CAST(CAST(REVERSE(SUBSTRING(Data, 41, 2)) AS binary(2)) AS smallint) AS DSTSecond,
 CAST(CAST(REVERSE(SUBSTRING(Data, 43, 2)) AS binary(2)) AS smallint) AS DSTMillisec
FROM #tztable;
DROP TABLE #tztable

একটি (জটিল) টি-এসকিউএল ফাংশন বর্তমান ডিএসটি বিধি চলাকালীন সমস্ত তারিখের সঠিক অফসেট নির্ধারণ করতে এই ডেটা ব্যবহার করতে পারে ।


2
DECLARE @TimeZone VARCHAR(50)
EXEC MASTER.dbo.xp_regread 'HKEY_LOCAL_MACHINE', 'SYSTEM\CurrentControlSet\Control\TimeZoneInformation', 'TimeZoneKeyName', @TimeZone OUT
SELECT @TimeZone
DECLARE @someUtcTime DATETIME
SET @someUtcTime = '2017-03-05 15:15:15'
DECLARE @TimeBiasAtSomeUtcTime INT
SELECT @TimeBiasAtSomeUtcTime = DATEDIFF(MINUTE, @someUtcTime, @someUtcTime AT TIME ZONE @TimeZone)
SELECT DATEADD(MINUTE, @TimeBiasAtSomeUtcTime * -1, @someUtcTime)

2
হাই জুস্ট! পোস্ট করার জন্য ধন্যবাদ। আপনি যদি নিজের উত্তরে কিছু ব্যাখ্যা যোগ করেন তবে এটি বোঝা অনেক সহজ।
লোলিডিবিএ

2

এখানে নির্দিষ্ট যুক্তরাজ্যের আবেদনের জন্য রচিত উত্তর এবং নিখুঁতভাবে নির্বাচন করুন।

  1. কোনও টাইমজোন অফসেট নেই (যেমন যুক্তরাজ্য)
  2. দিবালোক সংরক্ষণের জন্য লিখিত মার্চের শেষ রবিবার থেকে শুরু হয়ে এবং অক্টোবরের শেষ রবিবারে শেষ হবে (যুক্তরাজ্যের বিধি)
  3. দিনের আলোর সাশ্রয় শুরু হয়ে মধ্যরাত থেকে সকাল 1 টা এর মধ্যে প্রযোজ্য নয়। এটি সংশোধন করা যেতে পারে তবে এটি যে অ্যাপ্লিকেশনটির জন্য লেখা হয়েছিল এটির প্রয়োজন হয় না।

    -- A variable holding an example UTC datetime in the UK, try some different values:
    DECLARE
    @App_Date datetime;
    set @App_Date = '20250704 09:00:00'
    
    -- Outputting the local datetime in the UK, allowing for daylight saving:
    SELECT
    case
    when @App_Date >= dateadd(day, 1 - datepart(weekday, dateadd(day, -1, dateadd(month, 3, dateadd(year, datediff(year, 0, @App_Date), 0)))), dateadd(day, -1, dateadd(month, 3, dateadd(year, datediff(year, 0, @App_Date), 0))))
        and @App_Date < dateadd(day, 1 - datepart(weekday, dateadd(day, -1, dateadd(month, 10, dateadd(year, datediff(year, 0, @App_Date), 0)))), dateadd(day, -1, dateadd(month, 10, dateadd(year, datediff(year, 0, @App_Date), 0))))
        then DATEADD(hour, 1, @App_Date) 
    else @App_Date 
    end

আপনি সংক্ষিপ্ত নামগুলির পরিবর্তে দীর্ঘ তারিখের অংশের নামগুলি ব্যবহার করে বিবেচনা করতে চাইতে পারেন। কেবল স্বচ্ছতার জন্য। বেশ কয়েকটি "খারাপ অভ্যাস" সম্পর্কে অ্যারন বার্ট্র্যান্ডের দুর্দান্ত নিবন্ধটি
ম্যাক্স ভার্নন

এছাড়াও, ডেটাবেস প্রশাসকদের স্বাগতম - আপনি ইতিমধ্যে না থাকলে দয়া করে ট্যুরটি নিন !
ম্যাক্স ভার্নন

1
সকলকে ধন্যবাদ, সহায়ক মন্তব্য এবং সহায়ক সম্পাদনা পরামর্শ, আমি এখানে মোট নবাগত, একরকম আমি 1 পয়েন্ট জমা করতে পেরেছি যা চমকপ্রদ :-)।
colinp_1

এখন আপনার 11 টি
ম্যাক্স ভার্নন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.