এসকিউএল সার্ভারে দুটি তারিখের মধ্যে কীভাবে ঘন্টা (দশমিক) পার্থক্য গণনা করবেন?


84

এসকিউএল সার্ভার ২০০৮-এ দুটি তারিখের মধ্যে আমাকে ঘন্টা (দশমিক প্রকার) এর পার্থক্য গণনা করতে হবে।

এমএসডিএন-তে 'কনভার্ট' দিয়ে ডেটটাইমকে দশমিকের সাথে রূপান্তর করার জন্য আমি কোনও কার্যকর কৌশল খুঁজে পাইনি।
কেউ কি আমাকে তাতে সাহায্য করতে পারে?

আপডেট:
পরিষ্কার হওয়ার জন্য, আমারও ভগ্নাংশের অংশ প্রয়োজন (সুতরাং দশমিক প্রকারের)। সুতরাং 9:00 থেকে 10:30 অবধি এটি আমার 1.5।

উত্তর:


165

DATEDIFF(hour, start_date, end_date)আপনাকে ঘন্টার সীমানার সংখ্যাটি start_dateএবং এর মধ্যে অতিক্রম করবে end_date

আপনার যদি ভগ্নাংশের সংখ্যার প্রয়োজন হয় তবে আপনি DATEDIFFউচ্চতর রেজোলিউশনে ব্যবহার করতে পারেন এবং ফলাফলটি ভাগ করতে পারেন :

DATEDIFF(second, start_date, end_date) / 3600.0

এর জন্য ডকুমেন্টেশনগুলি DATEDIFFএমএসডিএন-তে উপলব্ধ:

http://msdn.microsoft.com/en-us/library/ms189794%28SQL.105%29.aspx


ভালো বুদ্ধি. বিটিডাব্লু - একই ফাংশনগুলি। নেট এ উপস্থিত রয়েছে তাই এটি ভিবি.নেট বা সি # তে কার্যকর।
জেফ

4
DATEDIFF (MINUTE, start_date,
শেষ_ তারিখ

8
@irfandar datepartপ্রেরণ DATEDIFFআউটপুট রেজল্যুশন নিয়ন্ত্রণ করবে। উদাহরণস্বরূপ, যদি start_dateএবং এটি end_date59 সেকেন্ডের দ্বারা পৃথক হয়, তবে DATEDIFF(MINUTE, start_date, end_date) / 60.00 DATEDIFF(second, start_date, end_date) / 3600.0ফিরে আসবে তবে 0.0163888 (59/3600) ফিরে আসবে।
ফিল রস

এই সমাধানটি কেবল পূর্ণসংখ্যার নম্বরটি ফিরিয়ে দিচ্ছে। যদি সময়ের পার্থক্যটি কেবল 15 মিনিটের হয় তবে ঘন্টা 0 ফিরে আসবে I আমি মনে করি নিম্নলিখিত সমাধানটি আরও বাস্তবসম্মত।
আসাদ না

4
@ আসাদনায়েম সমাধান (ঘন্টাের DATEDIFFচেয়ে বেশি রেজোলিউশনে ব্যবহার করে) কাজ করে। উদাহরণস্বরূপ, SELECT DATEDIFF(second, DATEADD(minute, -15, GETUTCDATE()), GETUTCDATE()) / 3600.00.250000 প্রদান করে।
ফিল রস

15

কেবলমাত্র দুটি ডেটটাইম মানগুলি বিয়োগ করুন এবং 24 দ্বারা গুণ করুন:

  Select Cast((@DateTime2 - @DateTime1) as Float) * 24.0

একটি পরীক্ষা স্ক্রিপ্ট হতে পারে:

  Declare @Dt1 dateTime Set @Dt1 = '12 Jan 2009 11:34:12'
  Declare @Dt2 dateTime Set @Dt2 = getdate()

  Select Cast((@Dt2 - @Dt1) as Float) * 24.0

এটি কাজ করে কারণ সমস্ত তারিখের সময়গুলি অভ্যন্তরীণভাবে একটি পূর্ণসংখ্যার জোড় হিসাবে সঞ্চিত থাকে, প্রথম পূর্ণসংখ্যাটি 1900 সালের 1 জানুয়ারীর দিন সংখ্যা এবং দ্বিতীয় পূর্ণসংখ্যা (সময়ের প্রতিনিধিত্বকারী ) মধ্যরাত থেকে ( 1 ) টিকের সংখ্যা । (স্মলডেটটাইমসের জন্য সময় অংশ পূর্ণসংখ্যা হল মধ্যরাত থেকে মিনিটের সংখ্যা)। মানগুলিতে করা কোনও গাণিতিক সময়ের অংশটিকে দিনের একটি অংশ হিসাবে ব্যবহার করে। 6am = 0.25, দুপুর = 0.5, ইত্যাদি ... আরও তথ্যের জন্য এখানে এমএসডিএন লিঙ্কটি দেখুন ।

সুতরাং কাস্ট ((@ ডিটি 2 - @ ডিটি 1) ফ্লোট হিসাবে) আপনাকে দুটি তারিখের মধ্যে মোট দিন দেয়। ঘন্টাগুলিতে রূপান্তর করতে 24 দ্বারা গুণ করুন। আপনার যদি মোট মিনিট প্রয়োজন হয়, তবে 24 এর পরিবর্তে প্রতি দিন কয়েক মিনিট (24 * 60 = 1440) একাধিক ...

দ্রষ্টব্য 1 : এটি কোনও ডটনেট বা জাভা স্ক্রিপ্ট টিকের মতো নয় - এই টিকটি প্রায় 3.33 মিলিসেকেন্ড।


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

10

DATEDIFF তবে নোট করুন এটি একটি পূর্ণসংখ্যা ফেরত দেয় যাতে আপনার যদি কয়েক ঘন্টার ভগ্নাংশ প্রয়োজন হয় এর মতো কিছু ব্যবহার করুন: -

CAST(DATEDIFF(ss, startDate, endDate) AS decimal(precision, scale)) / 3600

2

পোস্টগ্রিজ ব্যবহার করে আমার DATEDIFF নিয়ে সমস্যা ছিল তবে এতে সফলতা পেয়েছি:

  DATE_PART('day',(delivery_time)::timestamp - (placed_time)::timestamp) * 24 + 
  DATE_PART('hour',(delivery_time)::timestamp - (placed_time)::timestamp) +
  DATE_PART('minute',(delivery_time)::timestamp - (placed_time)::timestamp) / 60

যা আমাকে "14.3" এর মতো আউটপুট দিয়েছে


0
Declare @date1 datetime
Declare @date2 datetime

Set @date1 = '11/20/2009 11:00:00 AM'
Set @date2 = '11/20/2009 12:00:00 PM'

Select Cast(DateDiff(hh, @date1, @date2) as decimal(3,2)) as HoursApart

ফলাফল = 1.00


4
ডেটডিফ () একটি ইনট ফিরিয়ে দেয়। আপনি দশমিক কাস্ট করতে পারেন, তবে এটি ইতিমধ্যে ম্যান্টিসাকে ছাঁটাই করেছে।
জোয়েল কোহোর্ন

0

আপনি সম্ভবত DATEDIFF ফাংশনটি সন্ধান করছেন।

DATEDIFF (তারিখ পার্ট, প্রারম্ভকালীন, শেষ তারিখ)

যেখানে আপনার কোডটি দেখতে এইরকম হতে পারে:

DATEDIFF (এইচএইচ, শুরুর তারিখ, শেষ তারিখ)


4
'এইচএইচ' অন্তর সে যা চায় তা করবে না। তার একটি ছোট ব্যবধান দরকার যাতে তিনি ভগ্নাংশের ঘন্টা গণনা করতে পারেন।
জোয়েল কোহোর্ন

0
DATEDIFF(minute,startdate,enddate)/60.0)

অথবা এটি 2 দশমিক স্থানের জন্য ব্যবহার করুন:

CAST(DATEDIFF(minute,startdate,enddate)/60.0 as decimal(18,2))

-1

টেবিলের নাম থেকে ডেটিডিএফ (এইচ, ফার্স্ট তারিখ, দ্বিতীয় তারিখ) নির্বাচন করুন ...


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