কীভাবে একটি ডেটটাইমকে টি-এসকিউএলে স্ট্রিংয়ে রূপান্তর করতে হয়


91

আমি ইতিমধ্যে এখানে এই প্রশ্নটি সন্ধান করতে না পেরে অবাক হয়েছি।

আমার একটি তারিখের সময় বৈ আছে এবং আমি এটিকে একটি স্ট্রিংয়ে রূপান্তর করতে চাই যাতে আমি এটি অন্য স্ট্রিংয়ের সাথে যুক্ত করতে পারি। আমি এটিকে এমন ফর্ম্যাটে চাই যা সহজেই কোনও তারিখের সময়ে রূপান্তর করা যায়।

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

(আমি তারিখের অংশ এবং সময়ের অংশ চাই))


@ টনিহপকিনসন আমি প্রচুর হিট পেয়েছি কিন্তু তারা সবাই অন্যভাবে রূপান্তরিত হয়েছে বলে মনে হচ্ছে। বা আরও জটিল কিছু চাইছেন।
সিজেএ

4
টাইপ করুন Convert, হাইলাইট করতে ডাবল ক্লিক করুন, শিফট + F1 টিপুন ... সর্বদা প্রতিরক্ষা প্রথম লাইন।
এরিক জে। দাম

উত্তর:


156

নিম্নলিখিত ক্যোয়ারী বর্তমান তারিখের সময় পাবেন এবং স্ট্রিংয়ে রূপান্তর করবে। নিম্নলিখিত ফর্ম্যাট সহ
yyyy-mm-dd hh:mm:ss(24h)

SELECT convert(varchar(25), getdate(), 120) 

49
আমি এখনও এই সত্যটি বুঝতে পারি না যে আপনাকে সঠিক ফর্ম্যাটটি পেতে স্বেচ্ছাচারিত সংখ্যাগুলি পাস করতে হবে
cja

4
@ সিজেএ আমি আপনার আশ্চর্যতা সম্পূর্ণ ভাগ করে নিই আমি চাই সঠিক ফর্ম্যাটটি পেতে yyddss এর মতো স্ট্রিং সরবরাহ করতে চাই। এটির জন্য সম্ভবত কোনও প্রযুক্তিগত বা historicalতিহাসিক কারণ রয়েছে। তবে এখনও - খুব surpriannoying।
কনরাড ভিল্টারস্টন

4
দ্রুত সমাধানের জন্য ধন্যবাদ তবে আপনার উত্তরে আপনি কয়েক মিনিট হিসাবে মাসগুলি কোড করছেন, yyyy-MM-dd এইচ: মিমি: এসএস নয় ইয়ে-মিমি-ডিডি এইচ: মিমি: এসএস
টম মার্টিন

যদিও এটি পুরানো, আমি কেবল এই থ্রেডে ছুটে এসেছি। ব্যবহার করার সময় DateTimeOffSet, varcharআপনি নিজের ফলাফলটি কেমন দেখতে চান তার দৈর্ঘ্যটি সামঞ্জস্য করতে ভুলবেন না। আমার জন্য, আমি SELECT convert(varchar(19), sysdatetimeoffset(), 120)
টাইমজোনটি চাইনি

30

সেখানে অনেক বিভিন্ন উপায় আছে convertএকটি datetimeএকটি স্ট্রিং জন্য। এখানে একটি উপায়:

SELECT convert(varchar(25), getdate(), 121)  – yyyy-mm-dd hh:mm:ss.mmm

ডেমো দেখুন

এখানে এমন একটি ওয়েবসাইট যা সমস্ত রূপান্তরগুলির একটি তালিকা রয়েছে:

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


7

convertএকটি তারিখকে স্ট্রিংয়ে রূপান্তর করতে আপনি মাইক্রোসফ্ট এসকিউএল সার্ভারে বিবৃতিটি ব্যবহার করতে পারেন । ব্যবহৃত সিনট্যাক্সের একটি উদাহরণ হ'ল:

SELECT convert(varchar(20), getdate(), 120)

YYYY-MM-DD HH:MM:SSউপরেরগুলি 24 ঘন্টা ঘড়ির ফর্ম্যাট সহ স্ট্রিংয়ে বর্তমান তারিখ এবং সময়টি ফিরিয়ে আনবে ।

আপনি স্টেটমেন্টের শেষে নম্বরটি অনেকের মধ্যে একটিতে পরিবর্তন করতে পারেন যা প্রত্যাবর্তিত স্ট্রিং বিন্যাস পরিবর্তন করবে। এই কোডগুলির একটি তালিকা এমএসডিএন-তে CAST এবং কনভার্ট রেফারেন্স বিভাগে পাওয়া যাবে।


7

আমি আমার প্রয়োজনীয়তা এবং কোন সংস্করণটি ব্যবহার করছি তার উপর নির্ভর করে 3 টি পৃথক পদ্ধতি রয়েছে।

এখানে পদ্ধতিগুলি ..

1) রূপান্তর ব্যবহার

DECLARE @DateTime DATETIME = GETDATE();
--Using Convert
SELECT
    CONVERT(NVARCHAR, @DateTime,120) AS 'myDateTime'
    ,CONVERT(NVARCHAR(10), @DateTime, 120) AS 'myDate'
    ,RIGHT(CONVERT(NVARCHAR, @DateTime, 120),8) AS 'myTime'

2) কাস্ট ব্যবহার করে (এসকিউএল সার্ভার ২০০৮ এবং এর বাইরে)

SELECT
    CAST(@DateTime AS DATETIME2) AS 'myDateTime'
    ,CAST(@DateTime AS DATETIME2(3)) AS 'myDateTimeWithPrecision'
    ,CAST(@DateTime AS DATE) AS 'myDate'
    ,CAST(@DateTime AS TIME) AS 'myTime'
    ,CAST(@DateTime AS TIME(3)) AS 'myTimeWithPrecision'

3) স্থির দৈর্ঘ্যের অক্ষর ডেটা টাইপ ব্যবহার করে

DECLARE @myDateTime NVARCHAR(20) = CONVERT(NVARCHAR, @DateTime, 120);
DECLARE @myDate NVARCHAR(10) = CONVERT(NVARCHAR, @DateTime, 120);

SELECT
    @myDateTime AS 'myDateTime'
    ,@myDate AS 'myDate'

5

পূর্ববর্তী উত্তরগুলিতে CASTএবং CONVERTকার্যগুলি ছাড়াও , আপনি যদি এসকিউএল সার্ভার 2012 ব্যবহার করে থাকেন এবং তারপরে আপনি একটি DATETIMEভিত্তিক প্রকারকে স্ট্রিংয়ে রূপান্তর করতে ফর্ম্যাট ফাংশন ব্যবহার করেন ।

ফিরে রূপান্তর করতে, বিপরীত PARSEবা TRYPARSEফাংশন ব্যবহার করুন ।

বিন্যাস শৈলীগুলি .NET (টসস্ট্রিং () পদ্ধতির স্ট্রিং ফর্ম্যাটিং বিকল্পগুলির সমান) এর উপর ভিত্তি করে সংস্কৃতি সচেতন হওয়ার সুবিধা রয়েছে has যেমন

DECLARE @DateTime DATETIME2 = SYSDATETIME();
DECLARE @StringResult1 NVARCHAR(100) = FORMAT(@DateTime, 'g') --without culture
DECLARE @StringResult2 NVARCHAR(100) = FORMAT(@DateTime, 'g', 'en-gb') 
SELECT @DateTime
SELECT @StringResult1, @StringResult2
SELECT PARSE(@StringResult1 AS DATETIME2)
SELECT PARSE(@StringResult2 AS DATETIME2 USING 'en-gb')

ফলাফল:

2015-06-17 06:20:09.1320951
6/17/2015 6:20 AM
17/06/2015 06:20
2015-06-17 06:20:00.0000000
2015-06-17 06:20:00.0000000

আমি কি কিছু মিস করছি বা ওপিএস সমস্যাটি ফর্ম্যাট (<তারিখের বর্ণ>, 'ডিডি এমএমএমএম ইয়াই এইচ এইচ: মিমি: এসএস') বা আপনার প্রয়োজনমতো কাস্টম ডেট ফর্ম্যাট দিয়ে সমাধান করা হচ্ছে ?!
গ্রিম

@ গ্রিম আপনি এটিও করতে পারেন। দস্তাবেজগুলি থেকেThe format argument must contain a valid .NET Framework format string, either as a standard format string (for example, "C" or "D"), or as a pattern of custom characters for dates and numeric values (for example, "MMMM DD, yyyy (dddd)")
g2server

আমি মনে করি আপনি এখানে খুব পরিশ্রম করছেন। এসকিউএল সার্ভারের DATETIME2 এর জন্য অন্তর্নিহিত স্ট্রিং সমতুল্য রয়েছে। আপনি এখানে যা করছেন তা হ'ল অন্তর্নিহিত রূপান্তরটি কাজে লাগানো এবং তারপরে ফলাফলের স্ট্রিংটির বিন্যাস করা, তারিখের সময় নয়।
জেমি মার্শাল

পছন্দ করুন এমএসডিএন পরামর্শ দেয়:Use the FORMAT function for locale-aware formatting of date/time and number values as strings. For general data type conversions, use CAST or CONVERT.
g2server


1
SELECT CONVERT(varchar, @datetime, 103) --for UK Date format 'DD/MM/YYYY'

101 - মার্কিন - এমএম / ডিডি / ওয়াইওয়াইওয়াই

108 - সময় - এইচএইচ: এমআই: এসএস

112 - তারিখ - YYYYMMDD

121 - ওডিবিসি - YYYY-MM-DD এইচএইচ: এমআই: এসএস.এফএফএফ

20 - ওডিবিসি - ওয়াইওয়াই-এমএম-ডিডি এইচ এইচ: এমআই: এসএস


1

এটির উত্তর প্রচুর লোকেরা দিয়েছেন, তবে আমি মনে করি সহজ সমাধানটি বাদ পড়েছে।

এসকিউএল সার্ভার (আমি বিশ্বাস করি এর 2012+) এখানে DATETIME2 এর জন্য অন্তর্ভুক্ত স্ট্রিং সমতুল্য রয়েছে

"ডেটটাইম 2 এর জন্য সমর্থিত স্ট্রিং আক্ষরিক ফর্ম্যাটগুলি" বিভাগটি দেখুন

ওপিএস প্রশ্নের স্পষ্টভাবে উত্তর দিতে:

DECLARE @myVar NCHAR(32)
DECLARE @myDt DATETIME2
SELECT @myVar = @GETDATE()
SELECT @myDt = @myVar
PRINT(@myVar)
PRINT(@myDt)

আউটপুট:

Jan 23 2019 12:24PM             
2019-01-23 12:24:00.0000000

দ্রষ্টব্য: প্রথম পরিবর্তনশীল ( myVar) প্রকৃতপক্ষে মানটিও ধারণ করে '2019-01-23 12:24:00.0000000'। এটি কেবলমাত্র Jan 23 2019 12:24PMএসকিউএল সার্ভারের জন্য ডিফল্ট ফর্ম্যাটিং সেটটির কারণে ফর্ম্যাট হয়ে যায় যা আপনি যখন ব্যবহার করবেন তখন ডাকে PRINT। এটি দিয়ে এখানে বিভ্রান্ত হবেন না, আসল স্ট্রিং (myVer)='2019-01-23 12:24:00.0000000'


0

নীচে চেষ্টা করুন:

DECLARE @myDateTime DATETIME
SET @myDateTime = '2013-02-02'

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

4
ভাল !! আমাদের পাশাপাশি লেফটও লেখার দরকার আছে?
গৌরব 123

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