PDA

View Full Version : استفاده از دستور datediff



soniarose
یک شنبه 01 دی 1387, 14:34 عصر
سلام من براي اينكه مقادير ساعت دو ستون در sql رو كه از نوع datetime هستند رو از هم كم و سپس مقاديرشون رو با هم جمع كنم از اين دستور استفاده ميكنم
SUM(DATEDIFF(hour,StartTime,EndTime))
ولي اين كد وقتي جواب ميده كه نوع فيلدم از نوع datetime باشه اگه از نوع varcharباشه بايد چيكار كنم لطفا راهنمايي كنيد

mehdi.mousavi
یک شنبه 01 دی 1387, 14:43 عصر
سلام من براي اينكه مقادير ساعت دو ستون در sql رو كه از نوع datetime هستند رو از هم كم و سپس مقاديرشون رو با هم جمع كنم از اين دستور استفاده ميكنم
SUM(DATEDIFF(hour,StartTime,EndTime))
ولي اين كد وقتي جواب ميده كه نوع فيلدم از نوع datetime باشه اگه از نوع varcharباشه بايد چيكار كنم لطفا راهنمايي كنيد


اولین سوال در چنین مواقعی این هستش که "چرا فیلدهای DateTime اتون رو بصورت VARCHAR در بانک نگهداری میکنید"؟ اگر اونها VARCHAR هستن، پس چرا تاریخن؟ و اگر تاریخ هستن، پس چرا VARCHAR نگهداری میشن؟ اگر به این سوال پاسخ درستی بدید، پس تا اینجا جوابتون رو گرفتید و دیگه نیازی به خوندن پاراگراف بعدی ندارید.

شما این پاراگراف رو میخونید، چون اصرار دارید که فیلد datetime اتون رو بصورت VARCHAR در بانک نگهداری کنید. برای اینکه بتونید از DATEDIFF در این شرایط استفاده کنید، باید از تابع CAST یا CONVERT استفاده کنید تا ابتدا VARCHAR رو به DATETIME تبدیل کنید و سپس اونو بعنوان پارامتر به DATEDIFF بدید.

soniarose
یک شنبه 01 دی 1387, 21:57 عصر
سلام من چون ساعت و تاريخ سيستم رو ميگيرم اونو از نوع varchar ذخيره ميكنم (ايا راهي هست كه بتونم ساعت سيستم رو از نوع datetime ذخيره كنم) ميتونيد از تابع convert يا cast يك مثال بزنيد ممنون

mehdi.mousavi
دوشنبه 02 دی 1387, 12:57 عصر
سلام من چون ساعت و تاريخ سيستم رو ميگيرم اونو از نوع varchar ذخيره ميكنم (ايا راهي هست كه بتونم ساعت سيستم رو از نوع datetime ذخيره كنم) ميتونيد از تابع convert يا cast يك مثال بزنيد ممنون

سلام.
متوجه نمیشم! خوب DATETIME هم برای ذخیره ساعت و تاریخ هستش، پس چرا از VARCHAR استفاده میکنید؟ چرا بصورت DATETIME ذخیره نمیکنید؟

توضیحات کامل در مورد CAST و CONVERT (بهمراه چند مثال) رو میتونید اینجا بخونید (http://msdn.microsoft.com/en-us/library/ms187928.aspx).

aliila
دوشنبه 02 دی 1387, 15:47 عصر
اولین سوال در چنین مواقعی این هستش که "چرا فیلدهای DateTime اتون رو بصورت VARCHAR در بانک نگهداری میکنید"؟ اگر اونها VARCHAR هستن، پس چرا تاریخن؟ و اگر تاریخ هستن، پس چرا VARCHAR نگهداری میشن؟ اگر به این سوال پاسخ درستی بدید، پس تا اینجا جوابتون رو گرفتید و دیگه نیازی به خوندن پاراگراف بعدی ندارید.

شما این پاراگراف رو میخونید، چون اصرار دارید که فیلد datetime اتون رو بصورت VARCHAR در بانک نگهداری کنید. برای اینکه بتونید از DATEDIFF در این شرایط استفاده کنید، باید از تابع CAST یا CONVERT استفاده کنید تا ابتدا VARCHAR رو به DATETIME تبدیل کنید و سپس اونو بعنوان پارامتر به DATEDIFF بدید.

ببخشید تاریخ شمسی را چگونه در فلید ازنوع تاریخ میلادی میشه ذخیره کرد مثلا ماه سوم میلادی یا یکی از اونها 29 روز داره

mehdi.mousavi
دوشنبه 02 دی 1387, 16:04 عصر
ببخشید تاریخ شمسی را چگونه در فلید ازنوع تاریخ میلادی میشه ذخیره کرد مثلا ماه سوم میلادی یا یکی از اونها 29 روز داره

ابتدا تاریخ شمسی رو به میلادی تبدیل میکنید، سپس اونو در بانک ذخیره میکنید. ضمن اینکه ایشون هیچ جا ذکر نکردن که تاریخ رو شمسی در نظر گرفتن یا میلادی!

soniarose
دوشنبه 02 دی 1387, 19:07 عصر
من در بالا پرسيده بودم چطوري ميتونم ساعت وتاريخ سيستم رو datetime ذخيره كنم
در واقع من يك پروژه دارم كه بايد تاريخ و ساعت ورود و خروج كارمندان رو ثبت كنم وبعد تعداد ساعات كاري اونا رو بين دو تاريخ حساب كنم اين كار رو هم زمان با خواندن باركد مربوط به هر كارمند انجام ميدم و ساعت و تاريخ سيستم رو به عنوان ساعت و تاريخ ورود و خروج كارمندان قرار ميدم . حالا در اينكه فيلدم رو از نوع datetime بگيرم ترديد دارم چون datetime تاريخ شمسي قبول نميكنه