আমি ২০০q সালে এসকিএল সার্ভারের একটি ক্যোয়ারিতে কাজ করছি যেখানে আমাকে DateTime
ভেরিয়েবলের একটি মানকে বিন্যাসে varchar
পরিবর্তনের yyyy-mm-dd
(সময়ের অংশ ব্যতীত) রূপান্তর করতে হবে। আমি কেমন করে ঐটি করি?
আমি ২০০q সালে এসকিএল সার্ভারের একটি ক্যোয়ারিতে কাজ করছি যেখানে আমাকে DateTime
ভেরিয়েবলের একটি মানকে বিন্যাসে varchar
পরিবর্তনের yyyy-mm-dd
(সময়ের অংশ ব্যতীত) রূপান্তর করতে হবে। আমি কেমন করে ঐটি করি?
উত্তর:
মাইক্রোসফ্ট SQL সার্ভার সহ:
--
-- Create test case
--
DECLARE @myDateTime DATETIME
SET @myDateTime = '2008-05-03'
--
-- Convert string
--
SELECT LEFT(CONVERT(VARCHAR, @myDateTime, 120), 10)
LEFT(.., 10)
পরিবর্তে ব্যবহার করার কোনও কারণ আছে CONVERT(CHAR(10), ...)
? এছাড়াও 2005 (!) এর চেয়ে এসকিউএল সার্ভারের নতুন সংস্করণগুলিতে যারা কাজ করছেন তাদের ফাংশনের উপর ভিত্তি করে সমাধানের পরামর্শ দিয়ে জার শারদানের উত্তরটি পরীক্ষা করা উচিত FORMAT(date_value, format_string)
।
FORMAT()
খুব ধীর আপেক্ষিকconvert(char(10),...)
সমস্ত শৈলীর জন্য এখানে কিছু পরীক্ষার স্কুয়েল রয়েছে।
DECLARE @now datetime
SET @now = GETDATE()
select convert(nvarchar(MAX), @now, 0) as output, 0 as style
union select convert(nvarchar(MAX), @now, 1), 1
union select convert(nvarchar(MAX), @now, 2), 2
union select convert(nvarchar(MAX), @now, 3), 3
union select convert(nvarchar(MAX), @now, 4), 4
union select convert(nvarchar(MAX), @now, 5), 5
union select convert(nvarchar(MAX), @now, 6), 6
union select convert(nvarchar(MAX), @now, 7), 7
union select convert(nvarchar(MAX), @now, 8), 8
union select convert(nvarchar(MAX), @now, 9), 9
union select convert(nvarchar(MAX), @now, 10), 10
union select convert(nvarchar(MAX), @now, 11), 11
union select convert(nvarchar(MAX), @now, 12), 12
union select convert(nvarchar(MAX), @now, 13), 13
union select convert(nvarchar(MAX), @now, 14), 14
--15 to 19 not valid
union select convert(nvarchar(MAX), @now, 20), 20
union select convert(nvarchar(MAX), @now, 21), 21
union select convert(nvarchar(MAX), @now, 22), 22
union select convert(nvarchar(MAX), @now, 23), 23
union select convert(nvarchar(MAX), @now, 24), 24
union select convert(nvarchar(MAX), @now, 25), 25
--26 to 99 not valid
union select convert(nvarchar(MAX), @now, 100), 100
union select convert(nvarchar(MAX), @now, 101), 101
union select convert(nvarchar(MAX), @now, 102), 102
union select convert(nvarchar(MAX), @now, 103), 103
union select convert(nvarchar(MAX), @now, 104), 104
union select convert(nvarchar(MAX), @now, 105), 105
union select convert(nvarchar(MAX), @now, 106), 106
union select convert(nvarchar(MAX), @now, 107), 107
union select convert(nvarchar(MAX), @now, 108), 108
union select convert(nvarchar(MAX), @now, 109), 109
union select convert(nvarchar(MAX), @now, 110), 110
union select convert(nvarchar(MAX), @now, 111), 111
union select convert(nvarchar(MAX), @now, 112), 112
union select convert(nvarchar(MAX), @now, 113), 113
union select convert(nvarchar(MAX), @now, 114), 114
union select convert(nvarchar(MAX), @now, 120), 120
union select convert(nvarchar(MAX), @now, 121), 121
--122 to 125 not valid
union select convert(nvarchar(MAX), @now, 126), 126
union select convert(nvarchar(MAX), @now, 127), 127
--128, 129 not valid
union select convert(nvarchar(MAX), @now, 130), 130
union select convert(nvarchar(MAX), @now, 131), 131
--132 not valid
order BY style
ফলাফল এখানে
output style
Apr 28 2014 9:31AM 0
04/28/14 1
14.04.28 2
28/04/14 3
28.04.14 4
28-04-14 5
28 Apr 14 6
Apr 28, 14 7
09:31:28 8
Apr 28 2014 9:31:28:580AM 9
04-28-14 10
14/04/28 11
140428 12
28 Apr 2014 09:31:28:580 13
09:31:28:580 14
2014-04-28 09:31:28 20
2014-04-28 09:31:28.580 21
04/28/14 9:31:28 AM 22
2014-04-28 23
09:31:28 24
2014-04-28 09:31:28.580 25
Apr 28 2014 9:31AM 100
04/28/2014 101
2014.04.28 102
28/04/2014 103
28.04.2014 104
28-04-2014 105
28 Apr 2014 106
Apr 28, 2014 107
09:31:28 108
Apr 28 2014 9:31:28:580AM 109
04-28-2014 110
2014/04/28 111
20140428 112
28 Apr 2014 09:31:28:580 113
09:31:28:580 114
2014-04-28 09:31:28 120
2014-04-28 09:31:28.580 121
2014-04-28T09:31:28.580 126
2014-04-28T09:31:28.580 127
28 جمادى الثانية 1435 9:31:28:580AM 130
28/06/1435 9:31:28:580AM 131
nvarchar(max)
সময়টি ছাঁটাই করতে সংক্ষিপ্ত করুন । উদাহরণ স্বরূপ:
select convert(nvarchar(11), GETDATE(), 0)
union select convert(nvarchar(max), GETDATE(), 0)
আউটপুট:
May 18 2018
May 18 2018 9:57AM
dd-mm
বা চাই jun - 28
। কোন বিকল্প আছে ??
নিম্নলিখিত চেষ্টা করুন:
CONVERT(varchar(10), [MyDateTimecolumn], 20)
পুরো তারিখের জন্য এবং কেবল তারিখের জন্য নয়:
CONVERT(varchar(23), [MyDateTimecolumn], 121)
শৈলীতে রূপান্তর করার জন্য এই পৃষ্ঠাটি দেখুন:
http://msdn.microsoft.com/en-us/library/ms187928.aspx
বা
এসকিউএল সার্ভার কনভার্ট () ফাংশন
এসকিউএল সার্ভার ২০১২-এর একটি নতুন ফাংশন রয়েছে, ফরমেট: http://msdn.microsoft.com/en-us/library/ee634924.aspx
এবং আপনি কাস্টম তারিখের সময় বিন্যাসের স্ট্রিংগুলি ব্যবহার করতে পারেন: http://msdn.microsoft.com/en-us/library/ee634398.aspx
এই পৃষ্ঠাগুলি ইঙ্গিত দেয় যে এটি এসকিউএল ২০০৮ আর ২ তেও উপলব্ধ।
ব্যবহারের উদাহরণ (অস্ট্রেলিয়ান ডেটটাইম):
FORMAT(VALUE,'dd/MM/yyyy h:mm:ss tt')
হয় Cast
বা Convert
:
সিনট্যাক্স এর জন্য CAST
:
CAST ( expression AS data_type [ (length ) ])
সিনট্যাক্স এর জন্য CONVERT
:
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
http://msdn.microsoft.com/en-us/library/ms187928.aspx
আসলে যেহেতু আপনি একটি নির্দিষ্ট বিন্যাস চেয়েছিলেন:
REPLACE(CONVERT(varchar(10), Date, 102), '.', '-')
- এটি আপনাকে 'yyyy-mm-dd 00: 00: 00.000' বিন্যাসে 0 হিসাবে সময় দেয়
SELECT CAST( CONVERT(VARCHAR, GETDATE(), 101) AS DATETIME) ;
মাইক্রোসফ্ট এসকিউএল সার্ভার সহ:
কনভার্টের জন্য সিনট্যাক্স ব্যবহার করুন:
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
উদাহরণ:
SELECT CONVERT(varchar,d.dateValue,1-9)
শৈলীর জন্য আপনি এখানে আরও তথ্য সন্ধান করতে পারেন: এমএসডিএন - কাস্ট এবং রূপান্তর (লেনদেন-এসকিউএল) ।
নিম্নলিখিত চেষ্টা করুন:
CONVERT(VARCHAR(10),GetDate(),102)
তারপরে আপনার "প্রতিস্থাপন" করা দরকার। সঙ্গে "-".
এখানে একটি সাইট যা http://www.mssqltips.com/tip.asp?tip=1145 সহায়তা করে
declare @dt datetime
set @dt = getdate()
select convert(char(10),@dt,120)
char(10)
আপনি একটি নির্দিষ্ট স্ট্রিং ফর্ম্যাট হিসাবে চান হিসাবে আমার ডেটা দৈর্ঘ্য স্থির আছে ।
আপনি অনেক তারিখে আপনার তারিখ রূপান্তর করতে পারেন, সিনট্যাক্সটি ব্যবহার করা সহজ:
CONVERT('TheTypeYouWant', 'TheDateToConvert', 'TheCodeForFormating' * )
CONVERT(NVARCHAR(10), DATE_OF_DAY, 103) => 15/09/2016
আপনার ক্ষেত্রে , আমি কেবল এনভারচার (10) দ্বারা আকারটিকে রূপান্তরিত করেছি এবং সীমাবদ্ধ করেছি:
CONVERT(NVARCHAR(10), MY_DATE_TIME, 120) => 2016-09-15
আরও দেখুন: http://www.w3schools.com/sql/func_convert.asp
আরেকটি সমাধান (যদি আপনার তারিখ একটি তারিখের সময় হয়) একটি সাধারণ CAST :
CAST(MY_DATE_TIME as DATE) => 2016-09-15
এসকিউএল সার্ভারের জন্য 2008+ আপনি একসাথে কনভার্ট এবং ফর্ম্যাট ব্যবহার করতে পারেন।
উদাহরণস্বরূপ, ইউরোপীয় স্টাইলের জন্য (যেমন জার্মানি) টাইমস্ট্যাম্প:
CONVERT(VARCHAR, FORMAT(GETDATE(), 'dd.MM.yyyy HH:mm:ss', 'de-DE'))
আপনি কোন ডেটাবেসটি বলেন নি, তবে মাইএসকিএল দিয়ে একটি টাইমস্ট্যাম্প থেকে তারিখ পাওয়ার সহজ উপায় (এবং বার্চারের ধরণের রূপান্তর স্বয়ংক্রিয়ভাবে হওয়া উচিত):
mysql> select date(now());
+-------------+
| date(now()) |
+-------------+
| 2008-09-16 |
+-------------+
1 row in set (0.00 sec)
সবচেয়ে সংক্ষিপ্ত এবং সহজ উপায় হ'ল:
DECLARE @now AS DATETIME = GETDATE()
SELECT CONVERT(VARCHAR, @now, 23)
CONVERT(VARCHAR, GETDATE(), 23)
select REPLACE(CONVERT(VARCHAR, FORMAT(GETDATE(), N'dd/MM/yyyy hh:mm:ss tt')),'.', '/')
05/05/2020 10:41:05 AM
ফল হিসাবে দিতে হবে
আপনি কোন ভাষাটি বলবেন না তবে আমি অনুমান করছি C#/.NET
কারণ এর নেটিভ DateTime
ডেটা টাইপ রয়েছে। সেক্ষেত্রে কেবল ToString
পদ্ধতিটি ব্যবহার করে এটি রূপান্তর করুন এবং একটি ফর্ম্যাট স্পেসিফায়ার ব্যবহার করুন যেমন:
DateTime d = DateTime.Today;
string result = d.ToString("yyyy-MM-dd");
যাইহোক, আমি এটি একটি ডেটাবেস ক্যোয়ারিতে বা এসকিউএল বিবৃতিতে কনকনেটেড ব্যবহারের বিরুদ্ধে সতর্কতা অবলম্বন করব। ডেটাবেসগুলির একটি নির্দিষ্ট ফর্ম্যাটিং স্ট্রিং ব্যবহার করা প্রয়োজন। আপনি যদি সময়টি অর্জনের চেষ্টা করে থাকেন তবে আপনি সময়ের অংশটি শূন্য করে এবং ডেটটাইমকে এসকিউএল পরামিতি হিসাবে ব্যবহার করা ভাল।
CONVERT
, এমএসডিএন ডকুমেন্টেশন দেখুন ।