কোনও এসকিউএল সার্ভারের তারিখটাইম ডেটাটাইপ থেকে কীভাবে কেবল তারিখটি ফেরত যায়


1777
SELECT GETDATE()

রিটার্নস: 2008-09-22 15:24:13.790

আমি সময় অংশ ছাড়াই সেই তারিখের অংশটি চাই: 2008-09-22 00:00:00.000

আমি কীভাবে এটি পেতে পারি?


4
আপনি যদি সময় ছাড়া কোনও তারিখের ডেটাটাইপ পেতে সন্ধান করছেন, সময়টি যদি 00:00:00 হয় তবে আপনি ভাগ্য থেকে দূরে, আপনি একটি বার্চার পেতে পারেন তবে কাঠামোটি একটি ডেটটাইম এবং আপনার সবসময় কিছুটা সময় থাকতে পারে।
কুইন্টিন রবিনসন

16
একটি বিষয় লক্ষণীয় যে এসকিউএল সার্ভার ২০০৮ সালে সময় উপাদান ছাড়াই খেজুর সংরক্ষণের জন্য একটি পৃথক তারিখের ডেটাটাইপ অন্তর্ভুক্ত। এখানে আরও তথ্য: sql-server-performance.com/articles/dev/datetime_2008_p1.aspx
বেন হফস্টেইন

7
বিভিন্ন সময় অপসারণ পদ্ধতির পারফরম্যান্স পরীক্ষার ফলাফল দেখানো এই পোস্টটি মিস করবেন না ।
এরিক

18
ভোটের দ্বারা এবং বিভ্রান্তিকর উত্তর দ্বারা ভ্রান্ত হবে না, স্ট্যাকওভারফ্লো
রোহিত ভিপিন ম্যাথিউজ

8
@ রোহিত আপনি ভুলভাবে ধরে নিচ্ছেন যে ২০০৮ হ'ল একমাত্র সংস্করণ যা লোকেরা যত্ন করে। (বন্যের আরও সংস্করণ রয়েছে)) ভোটগুলি তাদের পক্ষে কথা বলে।
hktegner

উত্তর:


2486

উপর SQL Server 2008এবং উচ্চতর, আপনার CONVERTতারিখ করা উচিত :

SELECT CONVERT(date, getdate())

পুরানো সংস্করণগুলিতে, আপনি নিম্নলিখিতগুলি করতে পারেন:

SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, @your_date))

উদাহরণ স্বরূপ

SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()))

আমাকে দেয়

2008-09-22 00:00:00.000

পেশাদাররা:

  • কোনও varchar<-> datetimeরূপান্তর প্রয়োজন
  • ভাবার দরকার নেই locale

যেমনটি মাইকেল পরামর্শ দিয়েছেন

এই রূপটি ব্যবহার করুন: SELECT DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0)

select getdate()

SELECT DATEADD(hh, DATEDIFF(hh, 0, getdate()), 0)
SELECT DATEADD(hh, 0, DATEDIFF(hh, 0, getdate()))

SELECT DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0)
SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, getdate()))

SELECT DATEADD(mm, DATEDIFF(mm, 0, getdate()), 0)
SELECT DATEADD(mm, 0, DATEDIFF(mm, 0, getdate()))

SELECT DATEADD(yy, DATEDIFF(yy, 0, getdate()), 0)
SELECT DATEADD(yy, 0, DATEDIFF(yy, 0, getdate()))

আউটপুট:

2019-04-19 08:09:35.557

2019-04-19 08:00:00.000
4763-02-17 00:00:00.000

2019-04-19 00:00:00.000
2019-04-19 00:00:00.000

2019-04-01 00:00:00.000
1903-12-03 00:00:00.000

2019-01-01 00:00:00.000
1900-04-30 00:00:00.000

52
+1 দেখে মনে হচ্ছে এটি সাধারণত ব্যবহৃত ডাবল কনভার্ট () পদ্ধতির চেয়ে 35% দ্রুত (যা আমি বছরের পর বছর ধরেও ব্যবহার করি)। সুন্দর.
ডেন

8
আমি আপনার সমাধানটি দেখতে পাচ্ছি কেবলমাত্র খারাপ দিকটি হ'ল যদি আপনি না জেনে থাকেন যে এটি কী করছে এটি কিছুটা অবসন্নতা। ডাবল কনভার্ট পদ্ধতিটি আপনার উদ্দেশ্যগুলি ফুর্তি কোড রক্ষণাবেক্ষণকারীদের কাছে আরও সুস্পষ্ট করে তোলে। বিটিডাব্লু আমি আপনাকে অগ্রাহ্য করি নি। আমি মনে করি আমিও আপনার পদ্ধতিটি ব্যবহার শুরু করব। থানকিউ @ কাকু
জিম

38
@pilavdzice সেই দিনের মধ্যরাত্রি করার জন্য একটি DATETIME সেট করে ছেড়ে অফ দ্য TIME এ। আপনি কি ফলাফল আশা করছেন? datetimeডাটা টাইপ থাকতে পারে না সব সময়ে কোন সময় । আমি মনে করি আপনি ব্যবহারকারীর উপস্থাপনা সহ ডেটা স্টোরেজকে বিভ্রান্ত করছেন। যদি আপনি চান সমস্ত কিছু যদি কোনও ব্যবহারকারীকে এমন স্ট্রিং দেখানোর উপায় হয় যার কোনও সময়ের অংশ থাকে না (শূন্য নয়, কেবল ফাঁকা অংশ) তবে আপনি কেবল চান Convert(varchar(30), @Date, 101)বা অনুরূপ কিছু। আরও তথ্যের জন্য এসকিউএল সার্ভার বই অনলাইন • কাস্ট এবং রূপান্তর দেখুন।
এরিক

7
@ ব্যবহারকারী1671639 তারিখের ডেটা টাইপ সর্বদা একটি তারিখ এবং একটি সময় উভয়ই থাকে, আপনি সংজ্ঞাগতভাবে অন্যটি ব্যতীত সংরক্ষণ করতে পারবেন না - আপনি এসকিউএল সার্ভার ২০০৮ ব্যবহার না করে থাকেন, সেক্ষেত্রে পৃথক 'তারিখ' এবং 'সময়' ডেটাও থাকে না ধরনের। আপনি যদি কনভার্ট () এর মতো ব্যবহার করেন তবে আপনি অবশ্যই পরবর্তী ব্যবহারের জন্য একটি স্ট্রিং চান, সুতরাং আপনি এটির মতো আটকে যাবেন - যদিও আপনি তারিখটি কাটার পরিবর্তে তারিখের ফর্ম্যাটিং ফাংশনগুলি ব্যবহার করেন - তবে এটির চেয়ে ভাল be CAST(... AS DATE)বা CONVERT(DATE, ...), যা এই খুব পৃষ্ঠায় প্রায়শই উল্লেখ করা হয়েছে।
ম্যাগনাস

10
আমি উত্তরটি পরিবর্তন করার পরামর্শ দিচ্ছি SELECT DATEADD(dd, DATEDIFF(dd, 0, @your_date), 0)কারণ তারপরে একটি স্বেচ্ছাসেবী স্তরে আপনার কেটে ddদেওয়ার জন্য অন্য কোনও datepartকীওয়ার্ডের জন্য পরিবর্তন করা যেতে পারে datetime
মাইকেল - ক্লে শির্কি

717

এসকিউএল সার্ভার ২০০৮-তে এখন একটি 'তারিখ' ডেটা টাইপ রয়েছে যা সময়মাত্রা ছাড়াই কেবল একটি তারিখ থাকে। এসকিউএল সার্ভার ২০০৮ এবং এর বাইরে যে কেউ ব্যবহার করছেন তারা নিম্নলিখিতটি করতে পারেন:

SELECT CONVERT(date, GETDATE())

41
এসকিউএল ২০০৮-তে 'টাইম' ডেটা টাইপও রয়েছে যা তারিখ এবং সময় আলাদা করার প্রশ্নের অর্ধেক জবাব দেয়।
মিসটারেডান

8
এফওয়াইআই, আমি তারিখগুলি থেকে সময় ছাঁটাইয়ের বিভিন্ন পদ্ধতির বেঞ্চমার্ক করেছি এবং এটি ছিল দ্রুততম পদ্ধতি। পার্থক্যটি ছোট ছিল তবে এটি মৃত্যুদণ্ড কার্যকর করার একটি বৃহত্তর # টির চেয়ে স্পষ্টতই দ্রুত ছিল।
আনহানডেলডএক্সসেপসিয়ান

2
স্কেলসারভার 2005 সম্পর্কে wt ??
ড। এমএএফ

@ Dr.MAF বৃত্ত সম্পূর্ণ করা, প্রাক 2008 উত্তর এখানে: stackoverflow.com/questions/113045/...
Frosty840

170

যদি এসকিউএল ২০০৮ বা তার বেশি ব্যবহার করা হয়:

select cast(getdate() as date)

3
@ ফ্রেড্রিকগস: কী ধরণের, তারিখ? আপনি এসকিউএল সার্ভারের কোন সংস্করণ ব্যবহার করেন?
আবাটিশচেভ

7
সতর্ক থাকুন! @ তারিখ 1 তারিখের সময় = '2015-09-30 20: 59: 59.999' ঘোষণা করুন; কাস্ট নির্বাচন করুন (@ তারিখ হিসাবে তারিখ 1) '2015-10-01' ফেরান
নিক 18

6
@ নিক: এটি ডেটটাইম নিয়ে সমস্যা। DateTime2পরিবর্তে ব্যবহার করুন এবং এটি সূক্ষ্ম কাজ করে। স্কলফিল্ড.com
#!

8
@ নিক, অ্যাব্যাটিশচেভ প্রতিক্রিয়া পরিপূরক করতে, আপনার @ তারিখ 1 আসলে সীমাবদ্ধতার 2015-10-01কারণে DateTime। কোন প্রকার ছাড়াই চেষ্টা করুন Date, এটিও ফলন দেয় 2015-10-01! declare @date1 datetime = '2015-09-30 23:59:59.999';select @date1=>2015-10-01
ফ্রেডেরিক

4
এসকিউএল কৌশলগুলি মনে রাখা সহজ easy মাইক যেমনটি বলেছেন, কেবল ২০০৮ এর পরে তবে আপনি যদি 2005 এবং পূর্ববর্তী ডিবি কোথাও খুঁজে পান তবে আপনার অনেকগুলি সমস্যা হতে পারে :)
নিকভেরজ

73

DATEADD এবং DATEDIFF বর্ণচর্চায় কনভার্টিংয়ের চেয়ে ভাল। উভয় প্রশ্নের একই কার্যনির্বাহী পরিকল্পনা রয়েছে, তবে মৃত্যুদণ্ড কার্যকর করার পরিকল্পনাগুলি মূলত ডেটা অ্যাক্সেস কৌশলগুলি সম্পর্কে থাকে এবং সবসময় সিপিইউর সাথে জড়িত অন্তর্নিহিত ব্যয়গুলি সমস্ত টুকরো সঞ্চালনের জন্য প্রকাশিত হয় না। যদি উভয় কোয়েরি কয়েক মিলিয়ন সারি সহ কোনও টেবিলের বিরুদ্ধে চালানো হয়, তবে ডেটডিফ ব্যবহার করে সিপিইউ সময়টি কনভার্ট সিপিইউ সময়ের 1/3 য় কাছাকাছি হতে পারে!

প্রশ্নের জন্য মৃত্যুদণ্ড কার্যকর করার পরিকল্পনাগুলি দেখতে:

set showplan_text on
GO 

DATEADD এবং DATEDIFF উভয়ই একটি CONVERT_IMPLICIT কার্যকর করবে।

যদিও রূপান্তর করুন সমাধান সহজ পড়ার জন্য সহজ কিছু জন্য, এটা হল ধীর। ডেটটাইমে ফেরত কাস্ট করার দরকার নেই (এটি স্পষ্টভাবে সার্ভার দ্বারা সম্পন্ন করা হয়েছে)। ডেটডিফ পদ্ধতিতে ডেটএডএডের পরেও বাস্তবের প্রয়োজন নেই কারণ পূর্ণসংখ্যার ফলাফলটিও সুস্পষ্টভাবে ডেটটাইমে রূপান্তরিত হবে।


কনভার্ট নির্বাচন করুন (বার্চার, মাইডেট, 101) তারিখগুলি টেবিল থেকে

  |--Compute Scalar(DEFINE:([Expr1004]=CONVERT(varchar(30),[TEST].[dbo].[DatesTable].[MyDate],101)))
       |--Table Scan(OBJECT:([TEST].[dbo].[DatesTable]))

তারিখ টেবিলের থেকে তারিখটি (ডিডি, 0, ডেটেডিএফ (ডিডি, 0, মাইডিট)) নির্বাচন করুন

  |--Compute Scalar(DEFINE:([Expr1004]=dateadd(day,(0),CONVERT_IMPLICIT(datetime,datediff(day,'1900-01-01 00:00:00.000',CONVERT_IMPLICIT(datetime,[TEST].[dbo].[DatesTable].[MyDate],0)),0))))
       |--Table Scan(OBJECT:([TEST].[dbo].[DatesTable]))

@ ডিজি প্রস্তাবিত হিসাবে ফ্লোর () ব্যবহার করে ডেটডিফের কাছাকাছি পারফরম্যান্স রয়েছে তবে ডেটটাইম ডেটা টাইপটি ভাসা এবং পিছনে কাস্ট করার পরামর্শ দেওয়া হয় না কারণ সর্বদা আসল মান দেয় না।

ছেলেদের মনে রাখবেন: কাউকে বিশ্বাস করবেন না। পারফরম্যান্সের পরিসংখ্যানগুলি দেখুন এবং এটি নিজেই পরীক্ষা করুন!

আপনি যখন নিজের ফলাফলগুলি পরীক্ষা করছেন তখন সাবধান হন। ক্লায়েন্টে অনেকগুলি সারি নির্বাচন করা পারফরম্যান্সের পার্থক্যটি আড়াল করে রাখবে কারণ গণনা সম্পাদন করার চেয়ে নেটওয়ার্কের মধ্যে সারিগুলি প্রেরণে বেশি সময় লাগে। সুতরাং নিশ্চিত হয়ে নিন যে সমস্ত সারিগুলির জন্য কাজটি সার্ভার দ্বারা সম্পন্ন হয়েছে তবে ক্লায়েন্টের কাছে কোনও রোসেট পাঠানো হয়নি।

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

এখানে পূর্ণ পরীক্ষার স্ক্রিপ্ট এবং পারফরম্যান্স ফলাফল যা প্রমাণ করে যে ডেটডিফ ভার্চারে রূপান্তর করার চেয়ে যথেষ্ট দ্রুত is


রিকার্ডো সি, দুর্দান্ত তদন্ত! আপনি এসকিউএল সার্ভারের কোন সংস্করণ ব্যবহার করেন? তারিখের সাথে এমএসএসকিউএল 2000 পদ্ধতিটি আমার জন্য কিছুটা দ্রুত সম্পাদন করে।
aku

শুধু লক্ষণীয়, আমি পরীক্ষা করেছি 1000.000 বার। বাস্তব-বিশ্বের পরিস্থিতিগুলির জন্য পারফরম্যান্সের পার্থক্যটি লক্ষণীয় হবে না, আমার ধারণা
আকু

আকু, আমি এই পরীক্ষার জন্য এসকিউএল সার্ভার 2005 এক্সপ্রেস ব্যবহার করেছি। আমি 2000 এ কর্মক্ষেত্রে কাজ করি এবং আমি 24 মিলিয়নেরও বেশি সারি সহ একটি টেবিল দিয়ে এটি পরীক্ষা করব এবং এটি থেকে কী বেরিয়ে আসে তা দেখতে পাবো।
রিকার্ডো সি

আকু, একই ফলাফল। দশ মিলিয়ন সারির চেয়ে পারফরম্যান্সে কোনও পার্থক্য নেই।
রিকার্ডো সি

5
সমান পারফরম্যান্স সম্পর্কে দাবিগুলি সত্য নয়। অবশ্যই ফাঁসির পরিকল্পনা একই হবে !!! এই প্রয়োজনীয়গুলির উপর পারফরম্যান্স পরিমাপ করা সিপিইউ ব্যবহারের সাথে তুলনা করে কার্যকর করা পরিকল্পনাগুলি পরীক্ষা না করে করা উচিত।
এরিক

51

এটা চেষ্টা কর:

SELECT CONVERT(VARCHAR(10),GETDATE(),111)

উপরের বিবৃতিটি আপনার বর্তমান ফর্ম্যাটকে রূপান্তর YYYY/MM/DDকরে, আপনার পছন্দসই বিন্যাসটি চয়ন করতে দয়া করে এই লিঙ্কটি দেখুন


5
এটি আমার জন্য '
2008/09/22

1
কনভার্ট নির্বাচন করুন (ভর্চার (10), GETDATE (), 101) mm/dd/yyyyফর্ম্যাট।
ফ্লাইয়া

4
আপনি যদি কাঁচা পাঠ্য মান (ডিবি বাইরে) এর ভিত্তিতে বাছাই করেন তবে 'জাপানি' ফর্ম্যাটটি আরও ভাল
সাইমন_উইভার


21

তারিখ বিন্যাসে ফেরতের জন্য

কাস্ট (আদেশের তারিখ AS তারিখ)

উপরের কোডটি বেকার সার্ভার 2010 এ কাজ করবে

এটি 12/12/2013 এর মতো ফিরে আসবে

এসকিউএল সার্ভারের জন্য 2012 নীচের কোডটি ব্যবহার করুন

CONVERT(VARCHAR(10), OrderDate , 111)

1
এটি আমার তারিখটি শূন্য সময়ের সাথে দেয়, কেবল তারিখ নয়
বোহেমিয়ান

1
আপনি কি এসকিএল সার্ভারটি ব্যবহার করছেন তা কোন সংস্করণটি জানতে পারি?
মহেশ এমএল

1
@MaheshML এটা মাইক্রোসফট এসকিউএল 2012 সালে উভয় তারিখ এবং সময় ফেরৎ
Marek

1
এসকিউএল অ্যাজুরে
ম্যার্টন কোল

5
@MaheshML যেমন SQL সার্ভার 2010 কোন ধরনের জিনিস আছে
SvenAelterman

21

আপনি CONVERTকেবল তারিখটি ফিরতে ফাংশনটি ব্যবহার করতে পারেন । নীচের লিঙ্কটি দেখুন:

এসকিউএল সার্ভার 2000 এ তারিখ এবং সময় ম্যানিপুলেশন

কাস্ট এবং কনভার্ট

রূপান্তর ফাংশনটি ব্যবহারের জন্য সিনট্যাক্সটি হ'ল:

CONVERT ( data_type [ ( length ) ] , expression [ , style ] ) 

16

আপনার যেমন হিসাবে ফলাফল প্রয়োজন varchar, আপনার উচিত

SELECT CONVERT(DATE, GETDATE()) --2014-03-26
SELECT CONVERT(VARCHAR(10), GETDATE(), 111) --2014/03/26

যা ইতিমধ্যে উপরে উল্লিখিত হয়েছে।

আপনার যদি তারিখ এবং সময় বিন্যাসে ফলাফলের প্রয়োজন হয় তবে আপনার নীচের যে কোনও প্রশ্নের ব্যবহার করা উচিত

  1. SELECT CONVERT(DATETIME, CONVERT(VARCHAR(10), GETDATE(), 111)) AS OnlyDate 

    2014-03-26 00: 00: 00.000

  2. SELECT CONVERT(DATETIME, CONVERT(VARCHAR(10), GETDATE(), 112)) AS OnlyDate 

    2014-03-26 00: 00: 00.000

  3. DECLARE  @OnlyDate DATETIME
    SET @OnlyDate = DATEDIFF(DD, 0, GETDATE())
    SELECT @OnlyDate AS OnlyDate

    2014-03-26 00: 00: 00.000


14
SELECT CONVERT(VARCHAR,DATEADD(DAY,-1,GETDATE()),103) --21/09/2011

SELECT CONVERT(VARCHAR,DATEADD(DAY,-1,GETDATE()),101) --09/21/2011

SELECT CONVERT(VARCHAR,DATEADD(DAY,-1,GETDATE()),111) --2011/09/21

SELECT CONVERT(VARCHAR,DATEADD(DAY,-1,GETDATE()),107) --Sep 21, 2011

13

ফ্লোর () ব্যবহার করে - কেবল সময়ের অংশ কেটে দিন।

SELECT CAST(FLOOR(CAST(GETDATE() AS FLOAT)) AS DATETIME)

4
এই পদ্ধতিটি দ্রুততম নয়, এবং স্পষ্টভাবে লোকদের শেখায় যে ভাসমানের তারিখগুলি ingালাই সঠিক, যা এটি নয়। দয়া করে দেখুন এই পোস্টে আরো বিস্তারিত জন্য।
এরিক

13

আপনি যদি এসকিউএল সার্ভার 2012 বা তারপরের সংস্করণগুলি ব্যবহার করছেন ,

Format()ফাংশন ব্যবহার করুন ।

এসকিউএল সার্ভারের জন্য ইতিমধ্যে একাধিক উত্তর এবং বিন্যাসের ধরণ রয়েছে। তবে বেশিরভাগ পদ্ধতি কিছুটা অস্পষ্ট এবং নির্দিষ্ট তারিখের ফর্ম্যাট সম্পর্কিত ফর্ম্যাট টাইপ বা ফাংশনের জন্য সংখ্যাগুলি মনে রাখা আপনার পক্ষে কঠিন be এজন্য এসকিউএল সার্ভারের পরবর্তী সংস্করণগুলিতে আরও ভাল বিকল্প রয়েছে।

FORMAT ( value, format [, culture ] )

সংস্কৃতি বিকল্পটি খুব কার্যকর, কারণ আপনি আপনার দর্শকদের অনুযায়ী তারিখ নির্দিষ্ট করতে পারেন।

আপনাকে ডি (ছোট নিদর্শনগুলির জন্য) এবং ডি (দীর্ঘ নিদর্শনগুলির জন্য) মনে রাখতে হবে।

1. "ডি" - সংক্ষিপ্ত তারিখের প্যাটার্ন।

2009-06-15T13:45:30 -> 6/15/2009 (en-US)
2009-06-15T13:45:30 -> 15/06/2009 (fr-FR)
2009-06-15T13:45:30 -> 2009/06/15 (ja-JP)

2. "ডি" - দীর্ঘ তারিখের প্যাটার্ন।

2009-06-15T13:45:30 -> Monday, June 15, 2009 (en-US)
2009-06-15T13:45:30 -> 15 июня 2009 г. (ru-RU)
2009-06-15T13:45:30 -> Montag, 15. Juni 2009 (de-DE)

প্রশ্নের আরও উদাহরণ।

DECLARE @d DATETIME = '10/01/2011';
SELECT FORMAT ( @d, 'd', 'en-US' ) AS 'US English Result'
      ,FORMAT ( @d, 'd', 'en-gb' ) AS 'Great Britain English Result'
      ,FORMAT ( @d, 'd', 'de-de' ) AS 'German Result'
      ,FORMAT ( @d, 'd', 'zh-cn' ) AS 'Simplified Chinese (PRC) Result'; 

SELECT FORMAT ( @d, 'D', 'en-US' ) AS 'US English Result'
      ,FORMAT ( @d, 'D', 'en-gb' ) AS 'Great Britain English Result'
      ,FORMAT ( @d, 'D', 'de-de' ) AS 'German Result'
      ,FORMAT ( @d, 'D', 'zh-cn' ) AS 'Chinese (Simplified PRC) Result';

US English Result Great Britain English Result  German Result Simplified Chinese (PRC) Result
----------------  ----------------------------- ------------- -------------------------------------
10/1/2011         01/10/2011                    01.10.2011    2011/10/1

US English Result            Great Britain English Result  German Result                    Chinese (Simplified PRC) Result
---------------------------- ----------------------------- -----------------------------  ---------------------------------------
Saturday, October 01, 2011   01 October 2011               Samstag, 1. Oktober 2011        2011101

আপনি যদি আরও ফর্ম্যাট চান তবে আপনি এখানে যেতে পারেন:

  1. স্ট্যান্ডার্ড তারিখ এবং সময় ফর্ম্যাট স্ট্রিংস
  2. কাস্টম তারিখ এবং সময় ফর্ম্যাট স্ট্রিংস

12

যদি আপনি কনভার্টটি ব্যবহার করতে চান এবং উত্থাপিত মূল প্রশ্নের মতো একই আউটপুট পেতে চান, তা হল, ইয়াই-মিমি-ডিডি তারপর CONVERT(varchar(10),[SourceDate as dateTime],121)পূর্ববর্তী দম্পতির উত্তরগুলির মতো একই কোড ব্যবহার করুন , তবে ড্যাশগুলির সাথে yyyy-mm-dd তে রূপান্তর করতে কোডটি হ'ল 121।

আমি যদি এক সেকেন্ডের জন্য আমার সোপবক্সে উঠতে পারি তবে এই ধরণের ফরম্যাটিংটি ডেটা স্তরের অন্তর্ভুক্ত নয় এবং সে কারণেই এসকিউএল সার্ভার ২০০ 2008 সাল পর্যন্ত সিলি হাই-ওভারহেড 'ট্রিকস' ছাড়া এটি সম্ভব হয়নি যখন আসল ডেট পার্টের ডেটা টাইপ থাকে পরিচয় করিয়ে দেন। ডেটা স্তরে এ জাতীয় রূপান্তরগুলি করা আপনার ডিবিএমএসের উপরে ওভারহেডের একটি বিশাল অপচয়, তবে আরও গুরুত্বপূর্ণ, দ্বিতীয়টি আপনি এর মতো কিছু করেন, আপনি মূলত ইন-মেমরি অনাথ ডেটা তৈরি করেছেন যা আমি ধরে নিয়েছি আপনি পরে কোনও প্রোগ্রামে ফিরে আসবেন। আপনি এটিকে আর কোনও 3NF + কলামে রাখতে পারবেন না বা এটিকে টাইপ করা যেকোন কিছুকে আবার না ঘুরিয়ে তুলনা করতে পারেন, সুতরাং আপনারা সমস্ত কিছুই ব্যর্থতার পয়েন্ট এবং প্রাসঙ্গিক রেফারেন্সটি সরিয়ে নিয়েছেন।

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


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

1
@ অ্যান্ড্রু কেন ব্যাপার? আপনি বলছেন WHERE col >= @Date AND col < DATEADD(DAY, 1, @Date);- কলামটি থেকে সময় ছিনিয়ে নেওয়ার কোনও কারণ নেই।
অ্যারন বারট্র্যান্ড

1
@ অ্যারনবার্ট্র্যান্ড যা কেবলমাত্র ইনপুটটির @Dateশূন্য সময় অনুমান করে তা কাজ করে । যদি এটি সত্য না হয় তবে আপনাকে এখনও সার্ভার-সাইডের বার কীভাবে কেটে ফেলতে হবে তা জানতে হবে। আমি এই উত্তরের সাথে একমত যে ফর্ম্যাটিংটি উপস্থাপনা স্তরটিতে ছেড়ে দেওয়া উচিত, তবে আমি এই ইঙ্গিতটির সাথে একমত হইনি যে সামনের প্রান্তে রেখে যাওয়ার অর্থ আপনাকে কাটানোর দ্রুত উপায় জানতে হবে না।
অ্যান্ড্রু লাজার

1
@ অ্যান্ড্রু আপনাকে যা করতে হবে তা হ'ল ইনপুট প্যারামিটার তৈরি করতে হবে। আমার বক্তব্যটি এখনও এই যে, আপনারা কখনই কলামে এ জাতীয় কোনও কাটা প্রয়োগ করা উচিত নয় , যদিও এটি বেশিরভাগ মানুষের প্রথম প্রবৃত্তি।
অ্যারন বার্ট্র্যান্ড

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

10
SELECT DATEADD(DD, DATEDIFF(DD, 0, GETDATE()), 0)

SELECT DATEADD(DAY, 0, DATEDIFF(DAY,0, GETDATE()))

SELECT CONVERT(DATETIME, CONVERT(VARCHAR(10), GETDATE(), 101))

সম্পাদনা করুন: প্রথম দুটি পদ্ধতি মূলত একইরকম এবং বারচার পদ্ধতিতে রূপান্তর সম্পাদন করে।


1
এই পদ্ধতিগুলি দুর্দান্ত, তবে আপনি কোনটি ব্যবহার করার পরামর্শ দিচ্ছেন?
এডিগ্রোভস

3
নোট যে "সঠিক" শীর্ষ দুই সংস্করণ select dateadd(dd, datediff(dd, 0, getdate()), 0), কারণ ddগুলি তারপর কোন আউট অদলবদল করা যাবে কীওয়ার্ড কোনো সেগমেন্ট আপনি নির্বাচন তারিখ ক্লিপ করতে। (এছাড়াও এটি কেবল একটি সংক্ষেপণ হিসাবে লক্ষ্য করুন ))datepartddday
মাইকেল - ক্লে শিরকি কোথায়

10

নির্দেশিত ফলাফলটি পেতে, আমি নিম্নলিখিত কমান্ডটি ব্যবহার করি।

SELECT CONVERT(DATETIME,CONVERT(DATE,GETDATE()))

আমি এটি দরকারী।



7

আপনি যদি কোনও কলাম বা ভেরিয়েবলের ফলাফলগুলি অর্পণ করে থাকেন তবে এটির তারিখ টাইপ দিন এবং রূপান্তর অন্তর্ভুক্ত।

DECLARE @Date DATE = GETDATE()   

SELECT @Date   --> 2017-05-03

6

আমি মনে করি এটি আপনার ক্ষেত্রে কাজ করবে:

CONVERT(VARCHAR(10),Person.DateOfBirth,111) AS BirthDate
//here date is obtained as 1990/09/25

6
DECLARE @yourdate DATETIME = '11/1/2014 12:25pm'    
SELECT CONVERT(DATE, @yourdate)

2
এই পরামর্শটি অন্যান্য উত্তরের (একাধিকবার) কভার করা হয়েছে।
অ্যান্ড্রি এম

6

ঠিক আছে, যদিও আমি কিছুটা দেরি করেছি :), এখানে অন্য একটি সমাধান রয়েছে।

SELECT CAST(FLOOR(CAST(GETDATE() AS FLOAT)) as DATETIME)

ফলাফল

2008-09-22 00:00:00.000

এবং আপনি যদি এসকিউএল সার্ভার 2012 এবং এর বেশি ব্যবহার করেন তবে আপনি FORMAT()এই জাতীয় ফাংশনটি ব্যবহার করতে পারেন -

SELECT FORMAT(GETDATE(), 'yyyy-MM-dd')

আপনার প্রথম উদাহরণটিতে এখনও একটি সময়ের উপাদান রয়েছে। প্রশ্নের মূল বিষয়টি কীভাবে তা অপসারণ করা যায়।
জ্যাক

5

এমনকি প্রাচীন এমএসএসকিউএল সার্ভার .0.০ ব্যবহার করেও, এখানে কোড (এই লিঙ্কটির সৌজন্যে ) আমাকে সেই সময়ে যে তারিখের ফর্ম্যাটটি খুঁজছিলাম তা পেতে অনুমতি দিয়েছে:

PRINT '1) Date/time in format MON DD YYYY HH:MI AM (OR PM): ' + CONVERT(CHAR(19),GETDATE())  
PRINT '2) Date/time in format MM-DD-YY: ' + CONVERT(CHAR(8),GETDATE(),10)  
PRINT '3) Date/time in format MM-DD-YYYY: ' + CONVERT(CHAR(10),GETDATE(),110) 
PRINT '4) Date/time in format DD MON YYYY: ' + CONVERT(CHAR(11),GETDATE(),106)
PRINT '5) Date/time in format DD MON YY: ' + CONVERT(CHAR(9),GETDATE(),6) 
PRINT '6) Date/time in format DD MON YYYY HH:MM:SS:MMM(24H): ' + CONVERT(CHAR(24),GETDATE(),113)

এটি এই আউটপুট উত্পাদন করেছে:

1) Date/time in format MON DD YYYY HH:MI AM (OR PM): Feb 27 2015  1:14PM
2) Date/time in format MM-DD-YY: 02-27-15
3) Date/time in format MM-DD-YYYY: 02-27-2015
4) Date/time in format DD MON YYYY: 27 Feb 2015
5) Date/time in format DD MON YY: 27 Feb 15
6) Date/time in format DD MON YYYY HH:MM:SS:MMM(24H): 27 Feb 2015 13:14:46:630

5

তারিখ:

কনভার্ট নির্বাচন করুন (তারিখ, GETDATE ())
কাস্ট কাস্ট (তারিখ হিসাবে)

সময়:

কনভার্ট নির্বাচন করুন (সময়, GETDATE (), ১১৪)
কাস্ট কাস্ট (সময় হিসাবে GETDATE ())

5

সহজভাবে আপনি এইভাবে করতে পারেন:

SELECT CONVERT(date, getdate())
SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, @your_date))
SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()))

ফলাফলগুলি:

2008-09-22 00:00:00.000

বা কেবল এটির মতো করুন:

SELECT CONVERT (DATE, GETDATE()) 'Date Part Only'

ফলাফল:

Date Part Only
--------------
2013-07-14

4

আপনি কেন DATE_FORMAT (আপনার_সামগ্রী_কলাম, '% d-% m-% Y') ব্যবহার করবেন না?

গো EX: select DATE_FORMAT( some_datetime_column, '%d-%m-%Y' ) from table_name

আপনি '%d-%m-%Y'অংশ পুনরায় সাজিয়ে এম, ডি এবং বছরের ক্রম পরিবর্তন করতে পারেন


4

আমি জানি এটি পুরানো, তবে আমি কোথায় দেখছি না যে এইভাবে কেউ এটি বর্ণনা করেছিল stated আমি যা বলতে পারি তা থেকে এটি এএনএসআই মান।

SELECT CAST(CURRENT_TIMESTAMP AS DATE)

মাইক্রোসফ্ট যদি এএনএসআই স্ট্যান্ডার্ড CURRENT_DATE ভেরিয়েবলকে সমর্থন করতে পারে তবে ভাল হবে।


select {fn current_date()} as todayআমার জন্য কাজ কর.
ব্রায়ানারি

@ ব্রায়ানারি - এটি দুর্দান্ত, তবে এটি এএনএসআই এসকিউএল নয়।
শয়নকামরা

এটি যথেষ্ট ন্যায্য, এবং আপনার উত্তরটি সুন্দরভাবে বহনযোগ্য fig
ব্রায়ানারি

4

আমি নিম্নোক্ত বিষয়গুলির পক্ষে, যা উল্লেখ করা হয়নি:

DATEFROMPARTS(DATEPART(yyyy, @mydatetime), DATEPART(mm, @mydatetime), DATEPART(dd, @mydatetime))

এটি স্থানীয় সম্পর্কেও চিন্তা করে না বা ডাবল রূপান্তরও করে না - যদিও প্রতিটি 'ডেট পার্ট' সম্ভবত গণিত করে। সুতরাং এটি ডেটেডিফ পদ্ধতির চেয়ে কিছুটা ধীর হতে পারে তবে আমার কাছে এটি আরও পরিষ্কার। বিশেষত যখন আমি কেবল বছর এবং মাসের মধ্যে গ্রুপ করতে চাই (দিনটি 1 সেট করুন)।


4

এসকিউএল সার্ভার ২০১২ থেকে শুরু করে আপনি এটি করতে পারেন:

SELECT FORMAT(GETDATE(), 'yyyy-MM-dd 00:00:00.000')


4

এসকিউএল সার্ভারে 2000

CAST(
(
    STR( YEAR( GETDATE() ) ) + '/' +
    STR( MONTH( GETDATE() ) ) + '/' +
    STR( DAY( GETDATE() ) )
)
AS DATETIME)

4

এই ক্ষেত্রে, কেবলমাত্র তারিখ, আপনি এই কোয়েরিটি চালাবেন:

কনভার্ট নির্বাচন করুন (ভর্চার (10), গেটডেট (), 111);এখানে চিত্র বর্ণনা লিখুন


এটি গ্রহণযোগ্য উত্তর হওয়া উচিত।
noobprogrammer

3

আপনি তারিখের অংশ এবং তারিখের ফর্ম্যাট করার জন্য নিম্নলিখিত ব্যবহার করতে পারেন:

DATENAME => এমন একটি অক্ষরের স্ট্রিং প্রত্যাবর্তন করে যা নির্দিষ্ট তারিখের নির্দিষ্ট তারিখের অংশকে উপস্থাপন করে

তারিখ => DATEPART()ফাংশনটি কোনও তারিখ / সময়ের একক অংশ, যেমন বছর, মাস, দিন, ঘন্টা, মিনিট ইত্যাদি ফেরত দিতে ব্যবহৃত হয়

তারিখ পার্ট => একটি পূর্ণসংখ্যা প্রদান করে যা নির্দিষ্ট তারিখের নির্দিষ্ট তারিখের অংশকে উপস্থাপন করে।

CONVERT()=> CONVERT()ফাংশনটি একটি সাধারণ ফাংশন যা এক ডেটা টাইপের এক্সপ্রেশনকে অন্যটিতে রূপান্তর করে। CONVERT()ফাংশন বিভিন্ন বিন্যাসে তারিখ / সময় তথ্য প্রদর্শন ব্যবহার করা যাবে।

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