একটি ডেটটাইম কলামটি সেকেন্ডের সংখ্যায় রূপান্তর করুন


11

আমার এসকিউএল সার্ভার ডাটাবেসে আমার একটি datetimeকলাম রয়েছে।

একটি নতুন কলাম তৈরি করার ভাল উপায় কী যা কলামটির longমানটির প্রতিনিধিত্ব করে datetime? longসেকেন্ডের একটি সংখ্যা প্রতিনিধিত্ব করবে।

আমি ভেবেছিলাম আমি যদি এটিকে রূপান্তর longsকরতে পারি তবে সময়ের সাথে সাথে কোয়েরি করে গ্রুপ করা আরও সহজ করে দেবে, কারণ আমি কেবল দীর্ঘ পরিমাণকে নির্দিষ্ট পরিমাণে ভাগ করতে পারি।

টেবিলটি স্থির, ডেটা আপডেট বা মুছে ফেলা হবে না।

উত্তর:


13

একটি নতুন কলাম তৈরি করুন (টেবিল ALTER) তারপরে একটি আপডেট আপডেট করুন

UPDATE
  MyTable
SET
  NewIntColumn = DATEDIFF(SECOND, '19000101', MyDateTimeColumn)

19000101এসকিউএল সার্ভারের যুগ। 19700101উদাহরণস্বরূপ আপনি ইউনিক্স যুগের জন্য ব্যবহার করতে পারেন


12

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

গণিত কলাম

ALTER TABLE dbo.MyTable ADD NewIntColumn AS
  CONVERT(INT, DATEDIFF(SECOND, '19000101', MyDateTimeColumn));

--or for Unix epoch

ALTER TABLE dbo.MyTable ADD NewIntColumn AS
  CONVERT(INT, DATEDIFF(SECOND, '19700101', MyDateTimeColumn));

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

ALTER TABLE dbo.MyTable ADD NewIntColumn AS
  CONVERT(INT, DATEDIFF(SECOND, 0, MyDateTimeColumn)) PERSISTED;

-- or for Unix epoch

ALTER TABLE dbo.MyTable ADD NewIntColumn AS
  CONVERT(INT, DATEDIFF(SECOND, 25567, MyDateTimeColumn)) PERSISTED;

আপনি যদি লেখার পারফরম্যান্স (বা স্টোরেজ) এর চেয়ে পড়ার পারফরম্যান্স সম্পর্কে বেশি উদ্বিগ্ন হন তবে আপনি কলামটি চালিয়ে যেতে চাইবেন।

দৃশ্য

নতুন কলামে দেখার একটি সুবিধা হ'ল আপনাকে বেস টেবিল স্কিমা পরিবর্তন করতে হবে না (বা এটি আপ টু ডেট রাখার বিষয়ে চিন্তা করা)। আপনি ক্যোয়ারির সময় গণনার মূল্য প্রদান করেন, যা অ-স্থায়ী গণিত কলামের সমান the

CREATE VIEW dbo.vMyTable
AS
  SELECT -- other columns,
    MyDateTimeColumn,
    NewIntColumn = DATEDIFF(...whichever calc above makes sense...)
  FROM dbo.MyTable;

রানটাইম

উপরের গণনাগুলি অতিরিক্ত জটিল নয়, কেবল আপনার ক্যোয়ারীতে গণনাটি অন্তর্ভুক্ত করুন। আশা করি আপনি ডেটা অ্যাক্সেসের জন্য সঞ্চিত পদ্ধতি ব্যবহার করছেন যাতে আপনি প্রায়শই এটি পুনরাবৃত্তি করেন না।

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