একটি টাইমস্ট্যাম্পে এসকিউএল সার্ভারে ডেটটাইম ফিল্ডের ডিফল্ট মান যুক্ত করুন


265

আমি একটি টেবিল পেয়েছি যা আমাদের ওয়েবসাইট থেকে জমা দেওয়া ফর্ম সংগ্রহ করে, তবে কোনও কারণে তারা যখন টেবিলটি তৈরি করেছিল, তখন তারা টেবিলে কোনও টাইমস্ট্যাম্প রাখেনি। আমি এটি রেকর্ডটি প্রবেশ করানোর সঠিক তারিখ এবং সময়টি প্রবেশ করানো চাই।

আমি জানি যে এটি কোনও জায়গায় রয়েছে, তবে আমি কীভাবে ডিফল্ট মান সেট করতে পারি তা খুঁজে পেতে পারি না (যেমন অ্যাক্সেসে আপনি ব্যবহার করেন getNow()বা Now()) তবে কোথায় রাখবেন তা আমি জানি না।


সময় অঞ্চল সম্পর্কে সাবধান: স্ট্যাকওভারফ্লো.com
ট্যানার

উত্তর:


332

বিদ্যমান সারণীতে বিদ্যমান কলামটি সংশোধন করার জন্য:

ALTER TABLE YourTable ADD CONSTRAINT DF_YourTable DEFAULT GETDATE() FOR YourColumn

2
@ দ্য কিউ - ধন্যবাদ আমি পেয়েছি যে আমি "টেবিল "টিকে আমার টেবিলের নামটিতে পরিবর্তন করি, তবে যে অংশটি আমি বুঝতে পারি না তা হ'ল নিয়ন্ত্রণ। বাধা কী এবং আমি কি আমার টেবিলের নাম মেলে আপনার কোডটি পরিবর্তন করব?
স্টেফমোরল্যান্ড

@ স্টিফ - TheQএর উত্তর ধরে ধরেছে আপনি একটি বিদ্যমান কলামটি পরিবর্তন করছেন যা আমি বিশ্বাস করি না? এই ডিফল্ট সীমাবদ্ধতার সাথে কোডটির জন্য একটি নতুন কলাম যুক্ত করার জন্য আমার উত্তরটি দেখুন।
মার্টিন স্মিথ

1
কলামটির ডিফল্ট মান হওয়ার জন্য এটির জন্য একটি "ডিফল্ট সীমাবদ্ধতা" প্রয়োজন এবং এই আদেশটি এটি যুক্ত করবে will আপনি নিজের পছন্দসই বাধাটির নাম দিতে পারেন, ম্যানেজমেন্ট স্টুডিও সাধারণত তাদের নাম রাখে ডিএফ_টেবলনেম।
TheQ

@ দ্য কিউ - এটি নিখুঁত, আমি এটি চেষ্টা করব। আপনি ঠিকই বলেছেন, আমার কাছে ইতিমধ্যে ক্ষেত্র রয়েছে, তবে আমি এটিটিতে ফিক্সটি প্রয়োগ করতে চেয়েছিলাম, একটি নতুন তৈরি করতে চাইনি। আপনার সমস্ত উত্তরের জন্য ধন্যবাদ!
স্টেফমোরল্যান্ড 16

6
আপনি স্থানীয় সময় পরিবর্তে ইউটিসি টাইমস্ট্যাম্প চান, আপনি ব্যবহার করতে পারেন GETUTCDATE()পরিবর্তেGETDATE()
Cocowalla

147

এটি এসএসএমএস জিইআইয়ের মাধ্যমেও করা যেতে পারে।

  1. আপনার টেবিলটি নকশার দৃষ্টিতে রাখুন (অবজেক্ট এক্সপ্লোরার-> ডিজাইনে টেবিলের উপর ডান ক্লিক করুন )
  2. সারণিতে একটি কলাম যুক্ত করুন (বা আপনি যে কলামটি ইতিমধ্যে বিদ্যমান তা আপডেট করতে চাইলে এটি ক্লিক করুন)
  3. কলাম প্রোপার্টিস-এ, লিখুন (getdate())মধ্যে ডিফল্ট মান বা বাঁধাই ক্ষেত্র নীচে অঙ্কিত

নকশা ভিউতে টেবিলের চিত্র


ভাল প্রশ্ন. আমি dateadd(minute, 10, GetDate())কাজ করে কিনা তা দেখার চেষ্টা করব ।
টনি এল

স্কয়ার সার্ভার ডিজাইন ভিউতে আমি এটি চেষ্টা করেছি, এটি বলে মান অবশ্যই তালিকার আইটেমগুলির মধ্যে একটির সাথে মেলে! সুতরাং আমি এটিকে পিছনের প্রান্তে তৈরি করেছি
শরীফ

92

এসকিউএল সার্ভারের সেই সারণীতে, সেই কলামটির ডিফল্ট মান উল্লেখ করুন CURRENT_TIMESTAMP। এই কলামটির ডেটাটাইপ ডেটটাইম বা ডেটটাইম 2 হতে পারে।

যেমন

Create Table Student
(
  Name varchar(50),
  DateOfAddmission datetime default CURRENT_TIMESTAMP
);

1
এটি "[B এবং TIMESTAMP] এর মধ্যে রূপান্তর করতে অক্ষম" ত্রুটি বার্তায় ব্যর্থ হয়েছে। দেখে মনে হচ্ছে CURRENT_TIMESTAMP একটি বাইনারি মান, তারিখের সময় নয়।
সিন্ধ্রি ট্রাস্টসন

টাইমস্ট্যাম্প আপনাকে এর মতো একটি ইনপুট দেবে: yyyy-mm-dd 00:00:00 ইউটিসি; এবং এটি ডিবিটিকে এত বড় করে তুলতে পারে; আমি মনে করি তিনি কেবল ইয়ে-মিমি-ডিডি তারিখের অর্থ বোঝালেন; এবং এর জন্য ডিফল্ট মান phpmyadmin- এর সাধারণ দৃশ্যে "হিসাবে সংজ্ঞায়িত" ক্লিক করে সেট করা যায়
আমিনে

@ আমিন, টাইমস্ট্যাম্প একটি বাইনারি মান, সাধারণত 6-8 বাইট ব্যবহার করে। স্ট্রিং প্রতিনিধিত্ব ঠিক যেমন, একটি উপস্থাপনা যেমন ডাটাবেস স্ট্রিং হিসাবে পূর্ণসংখ্যা সংরক্ষণ করে না। (যদি আপনি সময়টিকে একটি ভ্রচার কলামে না ফেলে থাকেন, এবং ধিক্কার হচ্ছেন তারা হোন))
সিলভারব্যাক

1
আমি নোট করেছি যে কম্পিউটারের স্থানীয় সময় অঞ্চলে CURRENT_TIMESTAMPএকটি datetimeমান দেয়। এটি এড়ানো উচিত। পরিবর্তে ইউটিসিতে SYSUTCDATETIMEযা দেয় তা ব্যবহার করুন datetime2
দাই

28

যদিও চিহ্নিত উত্তরটি এর সাথে সঠিক:

ALTER TABLE YourTable ADD CONSTRAINT DF_YourTable DEFAULT GETDATE() FOR YourColumn

কোনও কলামে ডিফল্ট ডেটটাইম মান যুক্ত করার সময় আপনার সর্বদা সময় অঞ্চল সম্পর্কে সচেতন হওয়া উচিত।

উদাহরণস্বরূপ বলুন, datetimeকোনও মানচিত্রে কোনও সদস্য যখন কোনও ওয়েবসাইটে যোগদান করেন এবং আপনি এটি আবার ব্যবহারকারীর কাছে প্রদর্শিত হতে চান তা চিহ্নিত করার জন্য এই মানটি তৈরি করা হয়েছে, GETDATE()আপনাকে সার্ভারের সময় দেবে যাতে ব্যবহারকারী যদি সার্ভারের সাথে আলাদা লোকালে থাকে তবে তাত্পর্য দেখাতে পারে।

যদি আপনি আন্তর্জাতিক ব্যবহারকারীদের সাথে ডিল করার প্রত্যাশা করেন তবে কিছু ক্ষেত্রে GETUTCDATE () ব্যবহার করা ভাল , যা:

একটি ডেটটাইম মান হিসাবে বর্তমান ডাটাবেস সিস্টেম টাইমস্ট্যাম্প ফেরত দেয়। ডাটাবেস সময় অঞ্চল অফসেট অন্তর্ভুক্ত করা হয় না। এই মানটি বর্তমান ইউটিসি সময়কে (সমন্বিত ইউনিভার্সাল সময়) উপস্থাপন করে। এই মানটি কম্পিউটারের অপারেটিং সিস্টেম থেকে উদ্ভূত হয়েছে যেখানে এসকিউএল সার্ভারের দৃষ্টান্তটি চলছে।

ALTER TABLE YourTable ADD CONSTRAINT DF_YourTable DEFAULT GETUTCDATE() FOR YourColumn

মানগুলি পুনরুদ্ধার করার সময়, সামনের প্রান্তের অ্যাপ্লিকেশন / ওয়েবসাইটটি ইউটিসি সময় থেকে এই মানটির অনুরোধ করে ব্যবহারকারীের স্থানীয় / সংস্কৃতিতে রূপান্তর করা উচিত।


19

কলামে নালগুলি বাতিল করুন এবং এর কলামে একটি ডিফল্ট সেট করুন getdate()

/*Deal with any existing NULLs*/
UPDATE YourTable SET created_date=GETDATE() /*Or some sentinel value 
                                                '19000101' maybe?*/
WHERE created_date IS NULL


/*Disallow NULLs*/
ALTER TABLE YourTable ALTER COLUMN created_date DATE NOT NULL

/*Add default constraint*/
ALTER TABLE YourTable ADD CONSTRAINT
    DF_YourTable_created_date DEFAULT GETDATE() FOR created_date

বিদ্যমান ফিল্ড "তৈরি_সামগ্রী" পরিবর্তন করতে আপনি কীভাবে এটিকে পরিবর্তন করবেন?
স্টেফমোরল্যান্ড 16

@ স্টেফ - সম্পাদনা দেখুন। আমার আগের উত্তরটি অনুমান করা হয়েছিল যে এটি একটি নতুন কলাম। ডিফল্টরূপে কাজ করার জন্য আপনাকে NULLs অস্বীকার করতে হবে তাই আপনি কীভাবে প্রাক-বিদ্যমান সারিগুলি চিকিত্সা করতে চান?
মার্টিন স্মিথ

8

নতুন টেবিল তৈরি করার সময় এর সিনট্যাক্সটি হ'ল:

CREATE TABLE MyTable
(
    MYTableID INT IDENTITY(1,1),

    CreateDate DATETIME NOT NULL CONSTRAINT DF_MyTable_CreateDate_GETDATE DEFAULT GETDATE()
)

একটি নতুন কলাম যুক্ত করার সময় এটি একটি ALL TABLE বিবৃতিতে সমানভাবে ভাল কাজ করে।
ক্যাপ্টেন সংবেদনশীল

7

এটি আমার পক্ষে কাজ করে ...

ALTER TABLE [accounts] 
 ADD [user_registered] DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ;


4

এটি আমার পক্ষে কাজ করেছে। আমি ওরাকল ডিবি সহ এসকিউএল বিকাশকারী ব্যবহার করছি:

ALTER TABLE YOUR_TABLE
  ADD Date_Created TIMESTAMP  DEFAULT CURRENT_TIMESTAMP NOT NULL;

2

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

আসুন বলি যে টেবিলটিকে গ্রাহক বলা হয় যার 4 টি কলাম / কম বা আরও বেশি ...

আপনি টেবিলে একটি নতুন কলাম যুক্ত করতে চান যেখানে প্রতিবার যখন sertোকানো হয় ... তখন সেই কলামটি ঘটনাটি ঘটে যাওয়া সময়ের রেকর্ড রাখে।

সমাধান:

একটি নতুন কলাম যুক্ত করুন, আসুন বলুন যে টাইমপুরেজেস নতুন কলাম, ডেটা টাইপের ডেটটাইম সহ টেবিলে ।

তারপরে নিম্নলিখিত পরিবর্তনগুলি চালান:

ALTER TABLE Customer ADD CONSTRAINT DF_Customer DEFAULT GETDATE() FOR timePurchase

1

ধরা যাক আপনি একটি রেজিস্ট্রেশন সিস্টেমের জন্য একটি ডাটাবেস টেবিল তৈরি করেছেন।

IF OBJECT_ID('dbo.registration_demo', 'U') IS NOT NULL 
  DROP TABLE dbo.registration_demo; 

CREATE TABLE dbo.registration_demo (
    id INT IDENTITY PRIMARY KEY,
    name NVARCHAR(8)
);

এখন কয়েকজন লোক নিবন্ধন করে।

INSERT INTO dbo.registration_demo (name) VALUES
    ('John'),('Jane'),('Jeff');

তারপরে আপনি বুঝতে পারবেন যে তারা নিবন্ধভুক্ত হওয়ার জন্য আপনার একটি টাইমস্ট্যাম্প দরকার।

এই অ্যাপটি যদি কোনও ভৌগলিকভাবে স্থানীয় অঞ্চলে সীমাবদ্ধ থাকে তবে আপনি এর সাথে স্থানীয় সার্ভারের সময়টি ব্যবহার করতে পারেন GETDATE()। অন্যথায় আপনার ডিফল্ট মান সহ বিশ্বব্যাপী দর্শকদের জন্য ট্যানারের বিবেচনা করা উচিত GETUTCDATE()

এই উত্তরের মতো একটি বিবৃতিতে ডিফল্ট মান সহ কলাম যুক্ত করুন ।

ALTER TABLE dbo.registration_demo
ADD time_registered DATETIME DEFAULT GETUTCDATE();

আসুন আরেকটি নিবন্ধক এবং ডেটা দেখতে কেমন তা দেখুন।

INSERT INTO dbo.registration_demo (name) VALUES
    ('Julia');

SELECT * FROM dbo.registration_demo;
id    name    time_registered
1     John    NULL
2     Jane    NULL
3     Jeff    NULL
4     Julia   2016-06-21 14:32:57.767

0

এসকিউএলপ্লাসে একটি টেবিল তৈরি করার সময় এটির মতো হয়

এসকিউএল> টেবিল পরীক্ষা তৈরি করুন

 ( Test_ID number not null,
   Test_Date date default sysdate not null );

এসকিউএল> পরীক্ষায় প্রবেশ করুন (আইডি) মান (1);

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