তারিখে স্ট্রিংকে কীভাবে পার্স করবেন?


85

টি-এসকিউএল-তে কীভাবে আমি একটি স্ট্রিংকে তারিখে রূপান্তর করতে পারি?

আমার পরীক্ষার কেসটি হ'ল স্ট্রিং: '24.04.2012'

উত্তর:




22

ধরে নিই যে ডাটাবেসটি এমএস এসকিউএল সার্ভার 2012 বা ততোধিক, এখানে একটি সমাধান রয়েছে যা কাজ করে। প্রাথমিক বিবৃতিতে ইন-লাইন চেষ্টা-বিশ্লেষণ রয়েছে:

SELECT TRY_PARSE('02/04/2016 10:52:00' AS datetime USING 'en-US') AS Result;

আমরা উত্পাদনের সংস্করণে যা প্রয়োগ করেছি তা এখানে:

UPDATE dbo.StagingInputReview
 SET ReviewedOn = 
     ISNULL(TRY_PARSE(RTrim(LTrim(ReviewedOnText)) AS datetime USING 'en-US'), getdate()),
 ModifiedOn = (getdate()), ModifiedBy = (suser_sname())
 -- Check for empty/null/'NULL' text
 WHERE not ReviewedOnText is null 
   AND RTrim(LTrim(ReviewedOnText))<>''
   AND Replace(RTrim(LTrim(ReviewedOnText)),'''','') <> 'NULL';

ModifiedOn এবং ModifiedBy কলামগুলি কেবল অভ্যন্তরীণ ডাটাবেস ট্র্যাকিংয়ের উদ্দেশ্যে।

এই মাইক্রোসফ্ট এমএসডিএন উল্লেখগুলি দেখুন:


এটি ধরে নিয়েছে যে ওপি স্কেল সার্ভার 2012+ ব্যবহার করছে
মার্ক

8

যদিও কনভার্ট জিনিসটি কাজ করে, আপনার আসলে এটি ব্যবহার করা উচিত নয়। আপনার নিজের জিজ্ঞাসা করা উচিত কেন আপনি এসকিউএল-সার্ভারে স্ট্রিংয়ের মানগুলি পার্স করছেন। এটি যদি এককালীন কাজ হয় যেখানে আপনি ম্যানুয়ালি কিছু ডেটা ফিক্স করছেন আপনি সেই ডেটা অন্য সময় পাবেন না, এটি ঠিক আছে, তবে কোনও অ্যাপ্লিকেশন যদি এটি ব্যবহার করে তবে আপনার কিছু পরিবর্তন করা উচিত। "তারিখ" ডেটা টাইপ ব্যবহার করা সবচেয়ে ভাল উপায়। এটি যদি ব্যবহারকারী ইনপুট হয় তবে এটি আরও খারাপ। তারপরে আপনার ক্লায়েন্টে প্রথমে কিছু চেক করা উচিত। আপনি যদি সত্যিই স্ট্রিং মানগুলি পাস করতে চান যেখানে এসকিউএল-সার্ভার একটি তারিখ প্রত্যাশা করে, আপনি সর্বদা আইএসও ফর্ম্যাট ('YYYYMMDD') ব্যবহার করতে পারেন এবং এটি স্বয়ংক্রিয়ভাবে রূপান্তরিত হওয়া উচিত।


4
আপনি কোনও বাহ্যিক সিস্টেম থেকে ডেটা ফাইলগুলি আমদানি করছেন এমন পরিস্থিতি সম্পর্কে কী বলা যায় এবং ইনপুট কলামটি এই ফর্ম্যাটগুলির মধ্যে একটিতে হয়, যেমন "05/31/2013", তবে কোন স্ট্রিং হিসাবে আসে? এবং আপনি লিখছেন, বলুন, কোনও ডেটা আমদানি করার জন্য একটি সঞ্চিত পদ্ধতি, বা এসএসআইএস ব্যবহার করে এটি আমদানি করার জন্য? তাহলে কনভার্টটি ব্যবহারের উপযুক্ত জিনিস হবে, তাই না?
ডেভিড ব্যারোস

অগত্যা, এমএস এসকিউএল সার্ভার এমন পরিস্থিতিতে যেমন লেনদেনের বিপরীতে বিশ্লেষণী ডেটা মডেলগুলি হোস্ট করে, কনভার্ট ব্যবহার করা পুরোপুরি ঠিক আছে কারণ এটি অনেকগুলি বাহ্যিক উত্সের সাথে ডিল করতে হয় যা তাত্ক্ষণিকভাবে তারিখের ধরণ হিসাবে আসে না (ডেভিড ব্যারোস উপরে বর্ণিত হিসাবে)
উইল

তারিখগুলির জন্য ডিফল্ট স্ট্রিং আক্ষরিক বিন্যাসটি YYYY-MM-DD
YB

4

তুমি ব্যবহার করতে পার:

SELECT CONVERT(datetime, '24.04.2012', 103) AS Date

রেফারেন্স: কাস্ট এবং কনভার্ট (লেনদেন-এসকিউএল)


এটি আকর্ষণীয় যে কাজ করে। ফর্ম্যাট 103 ডিডি / মিমি / ইয়াহী এবং 104 ডিডি মিমি.আইআইআই হয়।
জেফ মোডেন

1
CONVERT(DateTime, ExpireDate, 121) AS ExpireDate

যা প্রয়োজন তা করবে, ফলাফল:

2012-04-24 00:00:00.000

এটি বিভিন্ন ভাষার সেটিংয়ের জন্যও ওপি পোস্ট করেছিল এমন কাজ করে বলে মনে হচ্ছে না। চেষ্টা করে দেখুন যদি এটি আসলে আপনার পক্ষে কাজ করে তবে দয়া করে আপনার বর্তমান ভাষা সেটিংটি কী পোস্ট করুন post ধন্যবাদ এখানে চেষ্টা করার কোডটি রয়েছে ... নির্বাচন করুন নির্বাচন করুন (তারিখটাইম,'২৪ .0৪.২০১ '', ১২১) এএস মেয়াদোত্তীর্ণ তারিখ
জেফ মোডেন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.