টি-এসকিউএল ডেটটাইমটি ফাংশনগুলি ব্যবহার করে নিকটতম মিনিটে এবং নিকটতম ঘন্টা পর্যন্ত গোল করে


113

এসকিউএল সার্ভার ২০০৮ এ, আমি তারিখের সময় কলামটি প্রায়শই ২০০৮ এর বিদ্যমান ফাংশনগুলির সাথে নিকটতম ঘন্টা এবং নিকটতম মিনিটে পেতে চাই।

এই কলাম মানটির জন্য 2007-09-22 15:07:38.850, আউটপুটটি দেখতে পাবেন:

2007-09-22 15:08 -- nearest minute
2007-09-22 15    -- nearest hour

6
নিকটতম মিনিটের উদাহরণটি 15:08 হওয়া উচিত নয়? কারণ এক মিনিটের মধ্যে সেকেন্ড 60 ...
ওএমজি পনিস

আপনি যখন তাঁর প্রশ্নটি সম্পাদনা করেছিলেন তখন আপনি কি ইচ্ছাকৃতভাবে ত্রুটিটি সংশোধন করেননি যাতে আপনি এই মন্তব্য করতে পারেন?
মিঃ বুধবার

@ মিঃ ওয়েবেড বুধবার আপনি বুঝতে পারবেন যে সম্পাদনা এবং সেই মন্তব্যের মধ্যে 10 মিনিটেরও বেশি সময় রয়েছে। আমি ভাবছিলাম পরে চিন্তাভাবনা ঘটেছে।
এলসি

উত্তর:


208
declare @dt datetime

set @dt = '09-22-2007 15:07:38.850'

select dateadd(mi, datediff(mi, 0, @dt), 0)
select dateadd(hour, datediff(hour, 0, @dt), 0)

ফিরে আসবে

2007-09-22 15:07:00.000
2007-09-22 15:00:00.000

উপরেরটি সেকেন্ড এবং মিনিটগুলি ছাঁটাই করে, প্রশ্নের জন্য জিজ্ঞাসিত ফলাফলগুলি তৈরি করে। @ ওএমজি পনিগুলি যেমন উল্লেখ করেছে, আপনি যদি উপরে / নিচে চড়াতে চান তবে আপনি যথাক্রমে আধ মিনিট বা আধা ঘন্টা যোগ করতে পারেন, তারপরে কাটা:

select dateadd(mi, datediff(mi, 0, dateadd(s, 30, @dt)), 0)
select dateadd(hour, datediff(hour, 0, dateadd(mi, 30, @dt)), 0)

এবং আপনি পাবেন:

2007-09-22 15:08:00.000
2007-09-22 15:00:00.000

এসকিউএল সার্ভার ২০০৮- এ তারিখের ডেটা টাইপ যুক্ত হওয়ার আগে , আমি কেবলমাত্র তারিখ পাওয়ার জন্য উপরের পদ্ধতিটি তারিখের সময় থেকে সময় অংশ কেটে ফেলতাম would ধারণাটি হ'ল প্রশ্নের মধ্যে থাকা তারিখের সময় এবং সময়ের মধ্যে একটি নির্দিষ্ট পয়েন্টের মধ্যে দিনগুলি নির্ধারণ করা ( 0যা স্পষ্টতই কাস্ট করে 1900-01-01 00:00:00.000):

declare @days int
set @days = datediff(day, 0, @dt)

এবং তারপরে নির্দিষ্ট স্থানে সেই সংখ্যক দিন যুক্ত করুন, যা আপনাকে নির্ধারিত সময়ের সাথে আসল তারিখ দেয় 00:00:00.000:

select dateadd(day, @days, 0)

বা আরও সংক্ষেপে:

select dateadd(day, datediff(day, 0, @dt), 0)

একটি আলাদা ডেট পার্ট (যেমন hour, mi) ব্যবহার করে সেই অনুযায়ী কাজ করবে।


2
আমি সন্দেহ করি যে অন্য যে কেউ এতে প্রবেশ করবে, তবে আপনি যদি ইউপিটিকে নিকটতম দ্বিতীয় দিকে ঘুরিয়ে দেওয়ার চেষ্টা করছেন এবং 500 মিলিসেকেন্ড যুক্ত করে আপনি ডেটেডিফ করতে চান (দ্বিতীয়, '1/1/2000', .... বনাম তারিখ (দ্বিতীয়, 0 .... আপনি ওভারফ্লো ত্রুটিটি পেয়ে যাবেন 0 0 থেকে সেকেন্ডটি আমার ধারণা খুব বড়
এরিক টোলিগার

'১৯ শে জানুয়ারী, ১৯ শে জানুয়ারীর পর থেকে ঘন্টার সংখ্যা যোগ করুন' - জাভা / এসকিউএল-এ আমি এর মুখোমুখি হয়েছিলাম, যেখানে এটি দেখতে কুৎসিত দেখাচ্ছে। আমার ক্ষেত্রে এটি জাভা দিক দিয়ে করা উচিত ছিল।
করভিন নিউল

সঙ্গে কম্পিউটেশনের জন্য datetimeoffset, আমি প্রতিস্থাপন করতে হয়েছে 0সঙ্গে TODATETIMEOFFSET('1900-01-01 00:00:00', 0)এড়াতে ফলাফলের সম্মুখের স্থানীয় সময় অঞ্চল অত্যাচার।
krlMLr

26

আপনার উদাহরণ হিসাবে "বৃত্তাকার" নিচে। এটি তারিখের একটি ভারচর মান প্রদান করবে।

DECLARE @date As DateTime2
SET @date = '2007-09-22 15:07:38.850'

SELECT CONVERT(VARCHAR(16), @date, 120) --2007-09-22 15:07
SELECT CONVERT(VARCHAR(13), @date, 120) --2007-09-22 15

CONVERT(datetime, CONVERT(VARCHAR(13), @date, 120)+':00:00')
তারিখের সময়টিতে বার্চরটি

10

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

CAST(YourValueHere as smalldatetime);

ঘন্টা বা সেকেন্ডের জন্য উপরে জেফ ওগাতার উত্তর (স্বীকৃত উত্তর) ব্যবহার করুন।


1
দুর্দান্ত উত্তর, আমি যাচাই করেছি যে এটি গোল করে এবং কেবল কাটা হয় না। এই অপশনটি মধ্যে খুঁজছেন অন্য কেউ জন্য, smalldatetimeএসকিউএল 2008 সালে যোগ করা হয়েছিল
BradC

আপনি যদি আপনার টেবিলের এমন কিছু ডেটা ঠিক করার দরকার পড়ে যা কেবলমাত্র কয়েক মিনিটের জন্য সময় প্রয়োজন।
এনক্রিপশন

-1

Select convert(char(8), DATEADD(MINUTE, DATEDIFF(MINUTE, 0, getdate), 0), 108) as Time

কয়েক সেকেন্ডে নেমে 00 হবে


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