এসকিউএল সার্ভারের ন্যূনতম তারিখ ফেরত ফাংশন (জানুয়ারী 1, 1753)


96

আমি তারিখের সময়কালের সর্বনিম্ন মান, জানুয়ারী 1, 1753 ফেরত দেওয়ার জন্য একটি এসকিউএল সার্ভার ফাংশনটি সন্ধান করছি। পরিবর্তে that তারিখের মানটি আমার স্ক্রিপ্টে হার্ডকড না করতাম।

এর মতো কি কিছু আছে? (তুলনা করার জন্য, সি # তে, আমি কেবল করতে পারতাম DateTime.MinValue) বা আমাকে নিজে এটি লিখতে হবে?

আমি মাইক্রোসফ্ট এসকিউএল সার্ভার ২০০ এক্সপ্রেস ব্যবহার করছি।


4
কেবল কৌতূহলী: আপনি কেন সেই তারিখটি একেবারে কলামটি নূতন হতে দেওয়ার বিপরীত হিসাবে ব্যবহার করার পরিকল্পনা করছেন?
জো স্টেফেনেলি

4
আপনি CONVERT(smalldatetime, 0)জন্য ব্যবহার করতে পারে smalldatetime
গ্যাবে

4
কনভার্ট (স্মার্টডেটটাইম, 0) বা কনভার্ট (ডেটটাইম, 0) বা কাস্ট (ডেটটাইম হিসাবে 0) তারিখের ন্যূনতম মান নয়
জেনাডি ভ্যানিন Ванин

4
@ জো: কলামটি নুল মানগুলিকে অনুমতি দেয় না এবং আমি এই টেবিলটি তৈরি করছি না বলে আমি এটি পরিবর্তন করতে চাই না।
জেরেমি

উত্তর:


96

আপনি এমন একটি ব্যবহারকারী সংজ্ঞায়িত ফাংশন লিখতে পারেন যা ন্যূনতম তারিখের মানটি এর মতো করে দেয়:

select cast(-53690 as datetime)

তারপরে আপনার স্ক্রিপ্টগুলিতে সেই ফাংশনটি ব্যবহার করুন এবং আপনার যদি কখনও এটি পরিবর্তন করতে হয় তবে এটি করার জন্য কেবল একটি জায়গা রয়েছে।

বিকল্পভাবে, আপনি যদি এই পাঠ্যটিকে আরও ভাল পঠনযোগ্যতার জন্য পছন্দ করেন তবে:

select cast('1753-1-1' as datetime)

উদাহরণ ফাংশন

create function dbo.DateTimeMinValue()
returns datetime as
begin
    return (select cast(-53690 as datetime))
end

ব্যবহার

select dbo.DateTimeMinValue() as DateTimeMinValue

DateTimeMinValue
-----------------------
1753-01-01 00:00:00.000

57
যদি আপনি একটি নির্বিচারে ধ্রুবক পেতে চলেছেন তবে এর '1753-1-1'চেয়ে অনেক ভাল-53690
গ্যাবে

6
ফাংশনটির নামটি মানটির স্পষ্ট ব্যাখ্যা করবে।
ডি'আরসি রিটিচ

4
Getdate () এর অনুরূপ নূন্যতম তারিখ পাওয়ার জন্য এমনকি এসকিউএল সার্ভার ২০১২ তে কোনও কার্যকারিতা নেই, সুতরাং উপরের একমাত্র সম্ভাব্য সমাধান। এটি স্কিল সার্ভার ২০১২ সম্পর্কিত সমাধানে আরও ভাল সমাধানের জন্য যে কেউ খুঁজছেন।
রাম

4
শুধু ডেটটাইম 2 (7) ব্যবহার করুন। এটি .NET ডেটটাইম টাইপটিকে ঠিক মানচিত্র করে। স্কুয়েল 'ডেটটাইম' ব্যবহার করা 'এনভারচর' এর পরিবর্তে 'বারচর' ব্যবহার করা হিসাবে খারাপ। 'এনভারচার' .NET স্ট্রিং টাইপের সাথে প্রান্তিক হয়। একই ধারণা। তারপরে আপনি কেবল ডেটটাইম.মিনভ্যালু সর্বত্র ব্যবহার করতে পারেন।
ট্রায়ঙ্কো

4
যেমন নীচে ফ্র্যাঙ্ক গিলিচ উল্লেখ করেছেন, cast('17530101' as datetime)আঞ্চলিক সমস্যাগুলিও এড়াতে পারবেন এবং -53690 এর চেয়ে কিছুটা বেশি পঠনযোগ্য।
জিম

29

আপনি কি SQLDateTime অবজেক্টটি দেখেছেন ? SqlDateTime.MinValueআপনার সর্বনিম্ন তারিখ পেতে ব্যবহার করুন (জানুয়ারী 1 1753)।


33
এটি একটি এসকিউএল ফাংশন হওয়া দরকার,। নেট ফাংশন নয়।
জেরেমি

4
যদিও SQLlateTime.MinValue কার্যকর, এটি একটি উত্তর হিসাবে এটি প্রতারণামূলক। @ জেরেমি নেট নেট ক্লাসের লাইব্রেরি থেকে কিছু নয়, নেটিভ স্কল ফাংশন চাইছেন
ইভান

6
এর জন্য আরও একটি অনুরূপ প্রশ্নে সহায়তা করেছে তবে এসকিউএল নয় নেট প্রসঙ্গে; এটা এই প্রশ্নের সঙ্গে কেস .. হিসাবে
t_plusplus

সম্ভবত আপনি নতুন ইউ-এসকিউএল
কাপ

14

ইনফিসিসিন্ট খ্যাতির পয়েন্টের কারণে আমি গৃহীত উত্তরের বিষয়ে মন্তব্য করতে পারি না বলে আমার মন্তব্যটি উত্তর হিসাবে আসে।

select cast('1753-1-1' as datetime)আঞ্চলিক সেটিংস ওয়াইওয়াইওয়াই-এমএম-ডিডি ফর্ম্যাটের তারিখের স্ট্রিং গ্রহণ না করে যদি কোনও ডাটাবেসে চালিত হয় তবে এটি ব্যবহার ব্যর্থ হতে পারে।

পরিবর্তে নির্দিষ্ট তারিখের সময় বিন্যাস সহ select cast(-53690 as datetime)বা একটি ব্যবহার করুন Convert


6

'yyyymmdd'আঞ্চলিক সমস্যাগুলি এড়ানোর জন্য স্থানীয় মান হিসাবে তারিখটি লিখুন :

select cast('17530101' as datetime)

হ্যাঁ, টিএসকিউএল থাকলে এটি দুর্দান্ত হবে MinDate() = '00010101'তবে এর মতো ভাগ্য নেই।


4

নূন্যতম তারিখের মান পাওয়ার জন্য এখানে একটি দ্রুত এবং উচ্চ পঠনযোগ্য উপায়

দ্রষ্টব্য: এটি একটি নির্ধারিত ফাংশন , সুতরাং কার্যকারিতা আরও উন্নত করতে আমরা পাশাপাশি প্রত্যাবর্তনের মূল্যে SCHEMABINDING এর সাথে প্রয়োগ করতে পারি।

একটি ফাংশন তৈরি করুন

CREATE FUNCTION MinDate()
RETURNS DATETIME WITH SCHEMABINDING
AS
BEGIN
    RETURN CONVERT(DATETIME, -53690)

END

ফাংশন কল করুন

dbo.MinDate()

উদাহরণ 1

PRINT dbo.MinDate()

উদাহরণ 2

PRINT 'The minimimum date allowed in an SQL database is ' + CONVERT(VARCHAR(MAX), dbo.MinDate())

উদাহরণ 3

SELECT * FROM Table WHERE DateValue > dbo.MinDate()

উদাহরণ 4

SELECT dbo.MinDate() AS MinDate

উদাহরণ 5

DECLARE @MinDate AS DATETIME = dbo.MinDate()

SELECT @MinDate AS MinDate

3

এটি 1 জানুয়ারী, 1753 নয় তবে castালাই নির্বাচন করুন ('' ডেটটাইম হিসাবে) যা প্রকাশিত: 1900-01-01 00: 00: 00.000 এসকিউএল সার্ভার দ্বারা ডিফল্ট মান দেয়। (যাইহোক আমার কাছে আরও অবিচ্ছিন্ন দেখায়)


4
এটি সঠিক নয়। বেস ডেটটাইম 1 জানুয়ারী 1900 00: 00: 00.000 (আপনি কী পাবেন SELECT CONVERT(DATETIME, 0)) তবে ডেটটাইম এসকিউএল সার্ভারে থাকা সর্বনিম্ন মানটি আসলে ওপি লিখেছেন 1753 এ। আমেরিকা যখন গ্রেগরিয়ান ক্যালেন্ডারেও স্যুইচ করে এবং এসকিউএল সার্ভারকে হারিয়ে যাওয়া দিনের সাথে ডিল করতে হয় না ইত্যাদি SELECT CONVERT(DATETIME, -53690)দেয় 1753-01-01 00:00:00.000এবং SELECT CONVERT(DATETIME, -53691)ওভারফ্লো সম্পর্কে ত্রুটি দেয়।
বুগবুনি

0

এসকিউএল সার্ভারে সর্বনিম্ন তারিখ পেতে আমি এটি ব্যবহার করি। দয়া করে নোট করুন যে এটি বিশ্বায়ন বান্ধব:

CREATE FUNCTION [dbo].[DateTimeMinValue]()
RETURNS datetime
AS
BEGIN
  RETURN (SELECT
    CAST('17530101' AS datetime))
END

কল করে:

SELECT [dbo].[DateTimeMinValue]()

-1

এর ব্যাপ্তি datetimeপরিবর্তন হবে না, কারণ এটি পশ্চাদপটে সামঞ্জস্যতা ভঙ্গ করবে। সুতরাং আপনি এটি হার্ড কোড করতে পারেন।


4
এটি সত্য, তবে গেটমিনডেট () বা কনভার্টের পরিবর্তে (ডেটটাইম, '1753-1-1') এর মতো অন্য কোনও জায়গায় কল করা আমার পক্ষে এটির প্রয়োজন হবে।
জেরেমি

@ জেরেমি: আমি জানি যে কী convertকরে তবে এর জন্য GetMinDate()আমাকে ফাংশন সংজ্ঞাতে ডুব দিতে হবে। সুতরাং আমি যদি আপনার কোড বজায় রাখতে পারি তবে আমি convertরূপটি পছন্দ করতাম ।
Andomar

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