ডেটটাইম কীভাবে ভারচরে রূপান্তর করবেন


303

আমি ২০০q সালে এসকিএল সার্ভারের একটি ক্যোয়ারিতে কাজ করছি যেখানে আমাকে DateTimeভেরিয়েবলের একটি মানকে বিন্যাসে varcharপরিবর্তনের yyyy-mm-dd(সময়ের অংশ ব্যতীত) রূপান্তর করতে হবে। আমি কেমন করে ঐটি করি?



3
আপনার ভাষা সেটিংসের উপর নির্ভর করে YYYY-MM-DD দ্ব্যর্থহীন তা জেনে থাকুন। ইউএসও স্ট্যান্ডার্ড ওয়াইওয়াইওয়াইএমডিডি ব্যবহার করা ভাল, এই ব্লগ পোস্টটি দেখুন
অ্যান্ডি ইরভিং

উত্তর:


262

মাইক্রোসফ্ট SQL সার্ভার সহ:

--
-- Create test case
--
DECLARE @myDateTime DATETIME
SET @myDateTime = '2008-05-03'

--
-- Convert string
--
SELECT LEFT(CONVERT(VARCHAR, @myDateTime, 120), 10)

12
আপনারা যারা আগ্রহী হতে পারেন তাদের জন্য, আপনি যদি ভ্রচারকে চারে পরিবর্তন করেন তবে এটি আরও ভাল পারফর্ম করবে। আরও তথ্যের জন্য এই পোস্টটি দেখুন ( stackoverflow.com/questions/59667/… )। মূলত, ওচারহেড বনাম CHAR- তে 2 বাইট ওভারহেড জড়িত। এই দৃশ্যে, আমরা জানি যে আপনার স্ট্রিং সর্বদা 10 টি অক্ষর হবে, তাই CHAR উপযুক্ত।
উইল এডিগার

1
সাইড নোট, আমি যা দেখেছি, তার থেকে খুব খারাপ কোনও ফর্ম্যাট সম্মানের সম্মান দেয় না যা ডেটফর্ম্যাট সেট করা আছে, সম্ভবত অন্য কোনও উপায় আছে।
অ্যালেক্স নোলাসকো

3
LEFT(.., 10)পরিবর্তে ব্যবহার করার কোনও কারণ আছে CONVERT(CHAR(10), ...)? এছাড়াও 2005 (!) এর চেয়ে এসকিউএল সার্ভারের নতুন সংস্করণগুলিতে যারা কাজ করছেন তাদের ফাংশনের উপর ভিত্তি করে সমাধানের পরামর্শ দিয়ে জার শারদানের উত্তরটি পরীক্ষা করা উচিত FORMAT(date_value, format_string)
নিকোলে

@Nickolay ব্যতীত FORMAT()খুব ধীর আপেক্ষিকconvert(char(10),...)
আব্দুল কাইয়ুম

380

সমস্ত শৈলীর জন্য এখানে কিছু পরীক্ষার স্কুয়েল রয়েছে।

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। কোন বিকল্প আছে ??
রক

এসকিউএল সার্ভার 2005 এর জন্য কাজ করে তাই আমাদের মধ্যে যারা দুর্ভাগ্যক্রমে পুরানো সিস্টেমগুলির সাথে مداخلت করছেন তাদের পক্ষে এটি দুর্দান্ত। শীঘ্রই 2014 এ আপগ্রেড!
ডিসলেক্সিকানবাবোক

আমি ১০১ - 101 = 04/28/2014 এর কাছাকাছি ফর্ম্যাট করতে চাই, আমি মাসে শূন্য ছাড়াই চাই, আউটপুট 4/28/2014, এটি কি প্রযোজ্য?
আহমদ আবদেলকাদের

1
সময় অঞ্চল আইডেন্টিফায়ার জেড শৈলী 127. অনুপস্থিত নয়
Atishay

@ আতিশয় "কেবলমাত্র অক্ষর ডেটা থেকে ডেটটাইম বা স্মার্টডেটটাইমে কাস্ট করার সময় সমর্থিত"। Docs.microsoft.com/de-de/sql/t-sql/function/…
কলিন

185

নিম্নলিখিত চেষ্টা করুন:

CONVERT(varchar(10), [MyDateTimecolumn], 20)

পুরো তারিখের জন্য এবং কেবল তারিখের জন্য নয়:

CONVERT(varchar(23), [MyDateTimecolumn], 121)

শৈলীতে রূপান্তর করার জন্য এই পৃষ্ঠাটি দেখুন:

http://msdn.microsoft.com/en-us/library/ms187928.aspx
বা
এসকিউএল সার্ভার কনভার্ট () ফাংশন


38

এসকিউএল সার্ভার ২০১২-এর একটি নতুন ফাংশন রয়েছে, ফরমেট: 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')

9

আপনি ব্যবহার করতে পারেন DATEPART(DATEPART, VARIABLE)। উদাহরণ স্বরূপ:

DECLARE @DAY INT 
DECLARE @MONTH INT
DECLARE @YEAR INT
DECLARE @DATE DATETIME
@DATE = GETDATE()
SELECT @DAY = DATEPART(DAY,@DATE)
SELECT @MONTH = DATEPART(MONTH,@DATE)
SELECT @YEAR = DATEPART(YEAR,@DATE)

8

হয় 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), '.', '-')

6

- এটি আপনাকে 'yyyy-mm-dd 00: 00: 00.000' বিন্যাসে 0 হিসাবে সময় দেয়


SELECT CAST( CONVERT(VARCHAR, GETDATE(), 101) AS DATETIME) ; 

5

মাইক্রোসফ্ট এসকিউএল সার্ভার সহ:

কনভার্টের জন্য সিনট্যাক্স ব্যবহার করুন:

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

উদাহরণ:

SELECT CONVERT(varchar,d.dateValue,1-9)

শৈলীর জন্য আপনি এখানে আরও তথ্য সন্ধান করতে পারেন: এমএসডিএন - কাস্ট এবং রূপান্তর (লেনদেন-এসকিউএল)




3
declare @dt datetime

set @dt = getdate()

select convert(char(10),@dt,120) 

char(10)আপনি একটি নির্দিষ্ট স্ট্রিং ফর্ম্যাট হিসাবে চান হিসাবে আমার ডেটা দৈর্ঘ্য স্থির আছে ।


2

ওপি তারিখের সময় বিন্যাস উল্লেখ করেছে । আমার জন্য, সময়ের অংশটি পথে যায়।
আমি মনে করি ফর্ম্যাটের আগে সময়ের অংশটি (তারিখের তারিখের তারিখের সময় কাস্ট করে) সরিয়ে নেওয়া কিছুটা পরিষ্কার।

convert( varchar(10), convert( date, @yourDate ) , 111 )


2

আপনি অনেক তারিখে আপনার তারিখ রূপান্তর করতে পারেন, সিনট্যাক্সটি ব্যবহার করা সহজ:

CONVERT('TheTypeYouWant', 'TheDateToConvert', 'TheCodeForFormating' * )
CONVERT(NVARCHAR(10), DATE_OF_DAY, 103) => 15/09/2016
  • কোডটি একটি পূর্ণসংখ্যা, এখানে 3 টি সেঞ্চুরি ছাড়াই তৃতীয় বিন্যাস, আপনি যদি সেঞ্চুরিটি চান তবে কোডটি 103 এ পরিবর্তন করুন।

আপনার ক্ষেত্রে , আমি কেবল এনভারচার (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

2

এই এসকিউএল চেষ্টা করুন:

select REPLACE(CONVERT(VARCHAR(24),GETDATE(),103),'/','_') + '_'+ 
       REPLACE(CONVERT(VARCHAR(24),GETDATE(),114),':','_')

2

এসকিউএল সার্ভারের জন্য 2008+ আপনি একসাথে কনভার্ট এবং ফর্ম্যাট ব্যবহার করতে পারেন।

উদাহরণস্বরূপ, ইউরোপীয় স্টাইলের জন্য (যেমন জার্মানি) টাইমস্ট্যাম্প:

CONVERT(VARCHAR, FORMAT(GETDATE(), 'dd.MM.yyyy HH:mm:ss', 'de-DE'))

1

আপনি কোন ডেটাবেসটি বলেন নি, তবে মাইএসকিএল দিয়ে একটি টাইমস্ট্যাম্প থেকে তারিখ পাওয়ার সহজ উপায় (এবং বার্চারের ধরণের রূপান্তর স্বয়ংক্রিয়ভাবে হওয়া উচিত):

mysql> select date(now());
+-------------+
| date(now()) |
+-------------+
| 2008-09-16  | 
+-------------+
1 row in set (0.00 sec)

1
আবার চেক করুন: তিনি একটি ট্যাগের মাধ্যমে এসকিএল সার্ভার নির্দিষ্ট করেছেন।
জোয়েল কোহোর্ন


1
DECLARE @DateTime DATETIME
SET @DateTime = '2018-11-23 10:03:23'
SELECT CONVERT(VARCHAR(100),@DateTime,121 )


0

একটি ফাংশন লিখুন

CREATE FUNCTION dbo.TO_SAP_DATETIME(@input datetime)
RETURNS VARCHAR(14)
AS BEGIN
    DECLARE @ret VARCHAR(14)
    SET @ret = COALESCE(SUBSTRING(REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR(26), @input, 25),'-',''),' ',''),':',''),1,14),'00000000000000');
    RETURN @ret
END


-3

আপনি কোন ভাষাটি বলবেন না তবে আমি অনুমান করছি C#/.NETকারণ এর নেটিভ DateTimeডেটা টাইপ রয়েছে। সেক্ষেত্রে কেবল ToStringপদ্ধতিটি ব্যবহার করে এটি রূপান্তর করুন এবং একটি ফর্ম্যাট স্পেসিফায়ার ব্যবহার করুন যেমন:

DateTime d = DateTime.Today;
string result = d.ToString("yyyy-MM-dd");

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


প্রশ্নে, এটি উল্লেখ করা হয়েছে "আমি ২০০q সালে সিকিএল সার্ভারে একটি প্রশ্নের উপর কাজ করছি"।
ইনকিহার্ট

4
@ ইনকাহার্ট এবং সমস্ত নিচে ভোটার - এই উত্তরটি ২০০৮ সালে পোস্ট করা হয়েছিল you আপনি যদি মূল প্রশ্নের জন্য সম্পাদনার ইতিহাস পরীক্ষা করেন তবে কোনও ট্যাগ এবং / অথবা কোনও প্রযুক্তি-সম্পর্কিত তথ্য অন্তর্ভুক্ত ছিল না।
GSazheniuk
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.