সি # ব্যবহার করে এসকিউএল ফর্ম্যাটে ডেটটাইম ফর্ম্যাট


111

আমি সি # থেকে বর্তমান তারিখের সময় বিন্যাসটি সংরক্ষণ করার চেষ্টা করছি এবং এটিকে এসকিউএল সার্ভারের তারিখের ফর্ম্যাটে রূপান্তর yyyy-MM-dd HH:mm:ssকরব যাতে আমি এটি আমার UPDATEপ্রশ্নের জন্য ব্যবহার করতে পারি ।

এটি আমার প্রথম কোড ছিল:

DateTime myDateTime = DateTime.Now;
string sqlFormattedDate = myDateTime.Date.ToString("yyyy-MM-dd HH:mm:ss");

তারিখে আউটপুট ঠিক আছে, তবে সময় সর্বদা "12:00:00" থাকে তাই আমি আমার কোডটি নিম্নলিখিতটিতে পরিবর্তন করেছি:

string sqlFormattedDate = myDateTime.Date.ToString("yyyy-MM-dd") + " " + 
myDateTime.TimeOfDay.ToString("HH:mm:ss");

এটি আমাকে এই সংকলন ত্রুটি দিয়েছে:

ফর্ম্যাটএক্সেপশন আনহ্যান্ডেল ছিল

এবং প্রস্তাবিত আমার পার্স করা প্রয়োজন। সুতরাং আমি স্ট্যাকওভারফ্লোতে আমার গবেষণা অনুযায়ী আমার কোডটিতে এটি করার চেষ্টা করেছি:

string sqlFormattedDate = myDateTime.Date.ToString("yyyy-MM-dd") + " " + 
myDateTime.Parse.TimeOfDay.ToString("HH:mm:ss");

অথবা

string sqlFormattedDate = myDateTime.Date.ToString("yyyy-MM-dd") + " " + 
myDateTime.tryParse.TimeOfDay.ToString("HH:mm:ss");

তবে এটি আমাকে বলছে যে এটি এমন একটি পদ্ধতি যা প্রদত্ত প্রেক্ষাপটে বৈধ নয়। আমি আমার সমস্যার সমাধান অনুসন্ধান করার চেষ্টা করেছি এবং আমি এখন দুই ঘন্টা আটকে আছি। আমি সি # তে এখনও কিছুটা নতুন, আপনি কি আমাকে সাহায্য করতে পারেন?


আপনি ডেটটাইম.ট্রি পার্সি এক্স্যাক্টের দিকে তাকিয়েছেন?
টিম


3
আপডেট করার জন্য কোনও পরামিতি ব্যবহার করবেন না DateTimeবা আপনি এটি স্ট্রিং হিসাবে সংরক্ষণ করছেন? এছাড়াও ToStringউপর Dateসূচিত করা হবে সেই সময় সর্বদা12:00:00
V4Vendetta

3
আপনার প্যারামিটারাইজড ক্যোয়ারী টাইপের একটি প্যারামিটার ব্যবহার করা উচিত DATETIMEএবং তারপরে আপনি স্ট্রিং প্রতিনিধিত্বের জন্য এবং পিছনে এই সমস্ত রূপান্তর করা এড়াতে পারেন!
marc_s

5
অন্যরা যেমন বলেছে, প্যারামিটারগুলি ব্যবহার করা এবং সবকিছুকে কেবল হিসাবে datetimeরাখা একটি ভাল শুরু হবে। আরও ভাল, আপনি কেন এখনকার সার্ভারটি পাস করছেন - এর একটি GETDATE()ফাংশন রয়েছে যা পুরোপুরি সার্ভারের দিকে বলা যেতে পারে।
ড্যামিয়েন_এ_বিশ্বাসীরা

উত্তর:


219

নীচে এটি চেষ্টা করুন

DateTime myDateTime = DateTime.Now;
string sqlFormattedDate = myDateTime.ToString("yyyy-MM-dd HH:mm:ss.fff");

আপনাকে অনেক ধন্যবাদ আমি sqlFormattedDate = myDateTime.DateTime ... স্ট্রিংয়ের চেষ্টা করছিলাম ... কিছু কারণে এটি আমি অর্জন করতে চাই।
এস কেসরিয়া

স্ট্যাকওভারফ্লোতে আমার অনুসন্ধান আমাকে একটি ভুল রেফারেন্স হিসাবে উল্লেখ করে রাখে যদিও প্রশ্নটি বেশ কয়েকবার উত্তর দেওয়া হয়েছিল, আমার মতো নবাবিরা এর কারণে সম্পর্কিত হতে পারে না। সবার কাছে দুঃখিত, আমি সক্ষম হবার সাথে সাথে প্রশ্নটি বন্ধ করে দেব।
এস কেসারিয়া

1
আমি মনে করি সি # "বাছাইযোগ্য" ফর্ম্যাট একই কাজ করে। সুতরাং আপনি কেবল myDateTime.ToString ("গুলি") করতে পারেন;
প্রোভেগা

@ প্রোভেগা এটি দেখতে একই দেখাচ্ছে না (তারিখ এবং সময়ের মধ্যে স্থানের পরিবর্তে টটস্ট্রিং ('গুলি') এর একটি টি রয়েছে) - তবে আমি নিশ্চিত করতে পারি যে তারা এসকিউএল সার্ভার দ্বারা টির সাথে বা ছাড়া পার্স করা হয়েছে ( আমি 2012 এ আছি)। আমি আমার লগিং ডেটটাইম ফর্ম্যাট হিসাবে 'গুলি' ব্যবহার শুরু করেছি, তাই আমি যা ভাবি তার সাথে আমি যাব, ধন্যবাদ!
ইয়ান গ্রেনার

হ্যাঁ, অফিসিয়াল পৃষ্ঠা CAST এবং কনভার্ট (লেনদেন-এসকিউএল) এ তারা ফর্মটির জন্য "ওডিবিসি ক্যানোনিকাল" yyyy-MM-ddনামটি দিনের সময় থেকে পৃথক করে একটি স্থান এবং পৃথক অক্ষর যেখানে ফর্মের জন্য "আইএসও 8601" নামটি ব্যবহার করে? ক T। তবে হ্যাঁ, উভয় রূপই স্পষ্টত (এবং সঠিকভাবে) এ রূপান্তর করে datetime
জেপ্পে স্টিগ

44

স্ট্যান্ডার্ড ডেটটাইম ফর্ম্যাট "s" ব্যবহার করা আন্তর্জাতিকীকরণের সামঞ্জস্যতাও নিশ্চিত করবে (এমএম / ডিডি বনাম ডিডি / এমএম):

myDateTime.ToString("s");

=> 2013-12-31T00:00:00

সম্পূর্ণ বিকল্প: (কোড: নমুনা ফলাফল)

d: 6/15/2008 
D: Sunday, June 15, 2008 
f: Sunday, June 15, 2008 9:15 PM 
F: Sunday, June 15, 2008 9:15:07 PM 
g: 6/15/2008 9:15 PM 
G: 6/15/2008 9:15:07 PM 
m: June 15 
o: 2008-06-15T21:15:07.0000000 
R: Sun, 15 Jun 2008 21:15:07 GMT 
s: 2008-06-15T21:15:07 
t: 9:15 PM 
T: 9:15:07 PM 
u: 2008-06-15 21:15:07Z 
U: Monday, June 16, 2008 4:15:07 AM 
y: June, 2008 

'h:mm:ss.ff t': 9:15:07.00 P 
'd MMM yyyy': 15 Jun 2008 
'HH:mm:ss.f': 21:15:07.0 
'dd MMM HH:mm:ss': 15 Jun 21:15:07 
'\Mon\t\h\: M': Month: 6 
'HH:mm:ss.ffffzzz': 21:15:07.0000-07:00

নেট ফ্রেমওয়ার্কে সমর্থিত: 4.6, 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0
রেফারেন্স: DateTime.ToStringপদ্ধতি


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

ঘন্টা এবং মিনিট পাশাপাশি পাওয়ার জন্য, আপনি এই রূপান্তরটি ব্যবহার করতে পারেন: স্ট্রিং sqlFormattedDate = YourDate.ToString ("yyyy-MM-ddTHH: মিমি: এসএস", সিস্টেম.গ্লোবালাইজেশন.ক্ল্যাচারআইএনফো, ইনভেরিয়ান্টকালচার);
নেটফিড

9

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

সরাসরি এসএসএমএসে বিবৃতি জারি করার সময় আমি ফর্ম্যাটটি ব্যবহার করি yyyymmddযা বেশ সাধারণ বলে মনে হয়। আমি এখন পর্যন্ত যে বিভিন্ন প্রতিষ্ঠানে কাজ করেছি তাতে কোনও সমস্যার মুখোমুখি হইনি।

অন্য কদাচিৎ ব্যবহৃত ফর্ম্যাট রয়েছে যা কিছুটা অদ্ভুত তবে সব সংস্করণের জন্য কাজ করে:

select { d '2013-10-01' }

অক্টোবর 2013 প্রথম ফিরে আসবে।

select { ts '2013-10-01 13:45:01' }

অক্টোবর 1 ফেব্রুয়ারী, 1:45:01 পিএম ফিরে আসবে

আমি প্যারামিটারগুলি ব্যবহার করার জন্য দৃ strongly়ভাবে পরামর্শ দিচ্ছি এবং হোমগ্রাউন ফর্ম্যাট স্টেটমেন্ট টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো করে পেস্ট করে আপনার নিজের এসকিউএল কোডটি কখনও ফর্ম্যাট করবেন না । এটি এসকিউএল ইঞ্জেকশন এবং অদ্ভুত ত্রুটির জন্য একটি প্রবেশিকা (একটি ভাসমান মান বিন্যাস করা অন্য সম্ভাব্য সমস্যা)


3

আপনার প্রথম কোড এটি করে কাজ করবে

DateTime myDateTime = DateTime.Now;
string sqlFormattedDate = myDateTime.ToString("yyyy-MM-dd HH:mm:ss"); //Remove myDateTime.Date part 

3

আপনার সমস্যাটি "তারিখ" বৈশিষ্ট্যে রয়েছে যা DateTimeকেবলমাত্র তারিখকে ছিন্ন করে। আপনি রূপান্তরটি এইভাবে রাখতে পারেন:

DateTime myDateTime = DateTime.Now;
string sqlFormattedDate = myDateTime.ToString("yyyy-MM-dd HH:mm:ss"); // <- No Date.ToString()!

2

আমি যে উত্তরটি সন্ধান করছিলাম তা হ'ল:

DateTime myDateTime = DateTime.Now;
string sqlFormattedDate = myDateTime.ToString("yyyy-MM-dd HH:mm:ss");

আমি আরও শিখেছি যে আপনি এটি এইভাবে করতে পারেন:

DateTime myDateTime = DateTime.Now;
string sqlFormattedDate = myDateTime.ToString(myCountryDateFormat);

যেখানে myCountryDate Format প্রয়োজনীয়তার উপর নির্ভর করে পরিবর্তনের জন্য পূরণ করা যেতে পারে।

দয়া করে নোট করুন যে "এই প্রশ্নের ইতিমধ্যে এখানে উত্তর থাকতে পারে:" ট্যাগযুক্ত উত্তরটি আসলে প্রশ্নের উত্তর দেয়নি কারণ আপনি দেখতে পাচ্ছেন যে এটিকে বাদ দেওয়ার পরিবর্তে এটি "" তারিখ "ব্যবহার করেছে। নেট নেটওয়ার্কের নতুন প্রোগ্রামারদের জন্য এটি বেশ বিভ্রান্তিকর


2

আপনি যদি বর্তমান তারিখটি টেবিলে সঞ্চয় করতে চান তবে আপনি ব্যবহার করতে পারেন

GETDATE ();

অথবা পরামিতি হিসাবে এই ফাংশনটি পাস করুন

যেমন। 'আপডেট tblname সেট কারডেট = GETDATE () যেখানে কলনাম = 123'



1

আপনার সমস্যা সেই Dateসম্পত্তিটিতে রয়েছে যা DateTimeকেবলমাত্র তারিখকে ছিন্ন করে। আপনি রূপান্তরটি এইভাবে রাখতে পারেন:

DateTime myDateTime = DateTime.Now;

string sqlFormattedDate = myDateTime.ToString("yyyy-MM-dd HH:mm:ss");

ধন্যবাদ। কেবল আমি যা খুঁজছিলাম;) অবাক করা মাইক্রোসফ্ট আরও সংক্ষেপে এটি করার জন্য কোনও পতাকা বা আদেশ যোগ করেনি did
জেক 2

0

এসকিউএল সার্ভার ভাষা সেটিংস নির্বিশেষে সি # থেকে এসকিউএল সার্ভারে ডেটটাইম পাস করার জন্য আরও একটি সমাধান

অনুমান করা হয় যে আপনার আঞ্চলিক সেটিংস তারিখটি dd.MM.yyyy (জার্মান স্ট্যান্ডার্ড '104') হিসাবে দেখায়

DateTime myDateTime = DateTime.Now;
string sqlServerDate ="CONVERT("date,'"+myDateTime+"',104)"; 

"104" নিয়ম অনুসারে ম্যাপিংয়ের কথা বিবেচনা করে সি # ডেটটাইম ভেরিয়েবলটি এসকিউএল সার্ভারের তারিখ প্রকারের ভেরিয়েবলকে পাস করে। SQL সার্ভারের তারিখটি yyyy-MM-dd পায়

যদি আপনার আঞ্চলিক সেটিংস ডেটটাইমকে আলাদাভাবে প্রদর্শন করে তবে এসকিউএল সার্ভার কনভার্ট সারণী থেকে উপযুক্ত মিলটি ব্যবহার করুন

বিধি সম্পর্কে আরও দেখুন: https://www.techonthenet.com/sql_server/funitions/convert.php


0

আমি মনে করি সমস্যাটি ছিল দুটি একক উদ্ধৃতি অনুপস্থিত।

এটি এমএসএসএমএসে চালিত স্কয়ারটি:

WHERE checktime >= '2019-01-24 15:01:36.000' AND checktime <= '2019-01-25 16:01:36.000'

আপনি দেখতে পাচ্ছেন দুটি সিঙ্গল কোট রয়েছে, সুতরাং আপনার কোডগুলি অবশ্যই:

string sqlFormattedDate = "'" + myDateTime.Date.ToString("yyyy-MM-dd") + " " + myDateTime.TimeOfDay.ToString("HH:mm:ss") + "'";

এমএসএসকিউএল এমনকি মাইএসকিউএলে প্রতিটি স্ট্রিংয়ের জন্য একক উদ্ধৃতি ব্যবহার করুন। আশা করি এটা কাজে লাগবে.


0

আসুন স্কেলডেটটাইম ক্লাসে বিল্টটি ব্যবহার করুন

new SqlDateTime(DateTime.Now).ToSqlString()

তবে এখনও নাল মানগুলি পরীক্ষা করা দরকার। এটি ওভারফ্লো ব্যতিক্রম ছুঁড়ে ফেলবে

new SqlDateTime(DateTime.MinValue).ToSqlString()

SqlDateTime overflow. Must be between 1/1/1753 12:00:00 AM and 12/31/9999 11:59:59 PM.



-1

আপনি যদি সেই ডেটটাইম সহ কোনও টেবিল আপডেট করতে চান তবে আপনি এই বর্গের স্ট্রিংটি উদাহরণের মতো ব্যবহার করতে পারেন:

int fieldId;
DateTime myDateTime = DateTime.Now
string sql = string.Format(@"UPDATE TableName SET DateFieldName='{0}' WHERE FieldID={1}, myDateTime.ToString("yyyy-MM-dd HH:mm:ss"), fieldId.ToString());

2
এই প্রশ্নের উত্তর ইতিমধ্যে দেওয়া হয়েছে এবং আরও মার্জিত সমাধানের সাথে গ্রহণ করা হয়েছে। এবং আপনি একটি ক্লোজিং মিস করছেন "
জানু

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