در هر پایگاه داده حداقل یک فیلد از نوع تاریخ وجود دارد که لازم است در دستورات از آن استفاده شود. درsql، چند تابع تاریخی وجود دارد تا راحتتر بتوان عملیاتهای خاص از جمله تفاضل دو تاریخ، استخراج بخشی از تاریخ، اضافه کردن به تاریخ و … را انجام داد. در این آموزش با توابع تاریخ در Sql همراه با مثالهای کاربردی آشنا خواهید شد. اولین و مهمترین دستور Sql، دستور Select است اگر با این دستور آشنایی ندارید ابتدا آموزش دستور Select را مشاهده کنید.
شرط تاریخ در Sql
در sql برای فلیدهای تاریخ دونوع وجود دارد یکی Date که فقط تاریخ را نگهداری میکند و دیگری Datetime است که تاریخ و زمان را نگه میدارد. اگر نوع فیلد موردنظر Date باشد دستورات به همان صورتیکه نوشته میشود خروجی میدهد اما هنگامیکه با بخش زمان هم درگیر هستید خروجی اندکی متفاوت است.
- حالت اول: فیلد از نوع تاریخ (Date) است و زمان ندارد. در این حالت خروجی دستور زیر شامل رکوردهایی است که مقدار فیلد ModifiedDate بزرگتر از تاریخ ‘2018-03-21’ است یعنی فروشهای از تاریخ “2018-03-22” به بعد در خروجی نمایش داده خواهد شد.
select * from sales.salesorderdetail where ModifiedDate > '2018-03-21'
- حالت دوم: فیلد از نوع تاریخ و زمان (Datetime) است. در این حالت اگر دستور فوق نوشته شود یعنی تنها تاریخ را بنویسید و زمان را مشخص نکنید بصورت خودکار زمان برابر صفر در نظر گرفته میشود و تمام رکوردهایی که از تاریخ ‘2018-03-21’ زمان آنها بزرگتر از صفر است در خروجی نمایش داده میشود.
درصورتیکه زمان را در کنار تاریخ مشخص کنید رکوردهای بزرگتر از آن تاریخ و زمان نمایش داده میشود.
select * from sales.salesorderdetail where ModifiedDate > '2018-03-21 11:43:16.257'
دستور between در Sql برای تاریخ
از دستور between برای بررسی بازهای میتوان استفاده کرد و حتماً باید تاریخ شروع از تاریخ پایان کوچکتر باشد و گرنه در خروجی رکوردی نمایش داده نمیشود.
select * from sales.salesorderdetail where ModifiedDate between '2018-03-21 11:43:16.257' and '2018-04-10'
در خروجی فروشهای روز ‘2018-03-21′ از ساعت ’11:43:16.257’ به بعد تا زمان صفر تاریخ ‘2018-04-10’ نمایش داده میشود یعنی فروشهای روز ‘2018-04-10’ نمایش داده نمیشود.
دریافت تاریخ روز در Sql
برای دریافت تاریخ روز در sql یک تابع بنام getdate وجود دارد که تاریخ و زمان جاری را نمایش میدهد. تابع getdate، یکی دیگر از توابع تاریخ در Sql است.
select getdate() خروجی تاریخ و زمان جاری بطورمثال "2019-12-14 11:55:43.333" است
تابع datepart در Sql
این تابع یکی از توابع تاریخ در Sql است که برای استخراج بخشی از تاریخ استفاده میشود. با کمک این تابع میتوان سال، ماه، روز، هفته، چندمین روز سال، چندمین روز هفته، ساعت، دقیقه، ثانیه و میلی ثانیه یک تاریخ و زمان را استخراج کرد. این تابع دارای دو ورودی میباشد اولین ورودی نوع خروجی و دومین پارامتر ورودی تاریخ و زمان موردنظر است. خروجی این تابع یک مقدار Int (عدد) است.
برای استخراج سال باید پارامتر ورودی اول را year، yy، yyyy و پارامتر دوم را تاریخ میلادی یا شمسی موردنظر قرار دهید.
select datepart(year,'2018-03-21 11:43:16.257') خروجی 2018 است select datepart(yy,getdate()) خروجی سال تاریخ جاری است
برای استخراج ماه باید پارامتر ورودی اول را m، mm، month و پارامتر دوم را تاریخ میلادی یا شمسی موردنظر قرار دهید.
select datepart(month,'2018-03-21') خروجی 3 نمایش میدهد select datepart(mm,getdate()) خروجی ماه تاریخ جاری است
برای استخراج فصل باید پارامتر ورودی اول را q، qq ،quarter و پارامتر دوم را تاریخ میلادی یا شمسی موردنظر قرار دهید.
select datepart(QUARTER,'2018-03-21') خروجی 1 است یعنی اولین فصل سال select datepart(QQ,getdate()) خروجی فصل تاریخ جاری است
برای استخراج روز باید پارامتر ورودی اول را d، dd،Day و پارامتر دوم را تاریخ میلادی یا شمسی موردنظر قرار دهید.
select datepart(DAY,'2018-03-21') خروجی 21 است select datepart(dd,getdate()) خروجی روز تاریخ جاری است
برای استخراج اینکه تاریخ برابر با چندمین روز سال است باید پارامتر ورودی اول را dayofyear و پارامتر دوم را تاریخ میلادی یا شمسی موردنظر قرار دهید.
select datepart(DAYOFYEAR,'1398/09/23 11:43:16.257') خروجی 266 است
برای استخراج اینکه تاریخ برابر با چندمین هفته سال است باید پارامتر ورودی اول را wk، ww،Week و پارامتر دوم را تاریخ میلادی یا شمسی موردنظر قرار دهید.
select datepart(WEEK,'2018-03-21') خروجی 12 است select datepart(ww,getdate())
برای استخراج اینکه تاریخ برابر با چندمین روز هفته است باید پارامتر ورودی اول را w، dw،Weekday و پارامتر دوم را تاریخ میلادی یا شمسی موردنظر قرار دهید.
select datepart(WEEKDAY,'1398/09/23') خروجی 1 است یعنی اولین روز هفته select datepart(DW,getdate())
سال، ماه و روز را بجز تابع datepart میتوان با کمک توابع year، month و day بصورت زیر استخراج کرد.
select year(getdate()) select month('1398/09/23 11:43:16.257') select day('2018-03-21 11:43:16.257')
تابع زمان در sql
علاوه بر توابع تاریخ در Sql، تابع زمان در sql نیز وجود دارد. برای استخراج ساعت باید پارامتر ورودی اول را h، hh،hour و پارامتر دوم را تاریخ و زمان میلادی یا شمسی موردنظر قرار دهید.
select datepart(HOUR,'1398/09/23 11:43:16.257') خروجی ساعت 11 است select datepart(HH,getdate()) خروجی ساعت تاریخ و زمان جاری است
برای استخراج دقیقه باید پارامتر ورودی اول را n، mi،Minute و پارامتر دوم را تاریخ و زمان میلادی یا شمسی موردنظر قرار دهید.
select datepart(MINUTE,'1398/09/23 11:43:16.257') خروجی دقیقه 43 است select datepart(mi,getdate()) خروجی دقیقه تاریخ و زمان جاری است
برای استخراج ثانیه باید پارامتر ورودی اول را s، ss،Second و پارامتر دوم را تاریخ و زمان میلادی یا شمسی موردنظر قرار دهید.
select datepart(SECOND,'1398/09/23 11:43:16.257') خروجی ثانیه 16 است select datepart(s,getdate()) خروجی ثانیه تاریخ و زمان جاری است
برای استخراج میلی ثانیه باید پارامتر ورودی اول را ms،Millisecond و پارامتر دوم را تاریخ و زمان میلادی یا شمسی موردنظر قرار دهید.
select datepart(MILLISECOND,'1398/09/23 11:43:16.257') خروجی 257 ملی ثانیه است select datepart(MS,getdate())
تابع اختلاف تاریخ در Sql
یکی دیگر از توابع تاریخ در Sql، تابع Datediff است که با کمک این تابع میتوان اختلاف دو تاریخ را استخراج کرد. اولین پارامتر ورودی این تابع همانند تابع Datepart مشخص کننده نوع خروجی بر اساس سال (year | yy)، ماه ( month | mm)، روز (day | dd)، ساعت (hour | hh)، دقیقه (minute | mi)، ثانیه (second | ss) و میلی ثانیه (millisecond | ms) است. پارامتر دوم تاریخ شروع و پارامتر ورودی سوم تاریخ پایان است.
توجه داشته باشید اگر تاریخ پایان کوچکتر از تاریخ شروع باشد خروجی عددی منفی خواهد بود.
select datediff(day,'1398/06/01','1398/06/30') خروجی 29 است select datediff(MONTH,'1398/06/01','1398/06/30') خروجی صفر است select datediff(YEAR,'1397/06/01','1398/06/30') خروجی یک است select datediff(hour,'1398/06/01','1398/06/02 11:43:16.257') خروجی 35 است select datediff(MINUTE,'1398/06/01','1398/06/02 11:43:16.257') خروجی 2143 است select datediff(SECOND,'1398/06/01','1398/06/02 11:43:16.257') خروجی 128596 است select datediff(MILLISECOND,'1398/06/02','1398/06/02 00:00:01.257') خروجی 1257 است
تابع dateadd در Sql
یکی دیگر از توابع تاریخ در Sql، تابع dateadd است که به کمک آن میتوان یک فاصله زمانی مشخص را به تاریخ موردنظر اضافه یا کم کرد. این تابع سه پارامتر ورودی دریافت میکند اولین پارامتر ورودی مشخص میکند که بر اساس سال (year | yy)، ماه ( month | mm)، روز (day | dd)، ساعت (hour | hh)، دقیقه (minute | mi)، ثانیه (second | ss) و میلی ثانیه (millisecond | ms) تاریخ موردنظر اضافه یا کم شود. پارامتر ورودی دوم یک عدد است که میزان افزایش یا کاهش را مشخص می کند و پارامتر ورودی سوم تاریخ موردنظر است. توجه داشته باشید در این تابع باید حتماً پارامتر ورودی سوم یک تاریخ میلادی باشد و برای افزایش تاریخ باید پارامتر دوم عددی مثبت باشد و کاهش تاریخ باید پارامتر دوم عددی منفی باشد
select DATEADD(YEAR,1,'2018-12-15 09:17:15.297') خروجی 2019-12-15 09:17:15.297 است یعنی یکسال به تاریخ اضافه میشود select DATEADD(YEAR,-1,'2018-12-15 09:17:15.297') خروجی 2017-12-15 09:17:15.297 است یعنی یکسال از تاریخ کم میشود select DATEADD(MONTH,1,'2018-12-15 09:17:15.297') خروجی 2019-01-15 09:17:15.297 است یعنی یک ماه به تاریخ اضافه میشود select DATEADD(day,5,'2018-12-15 09:17:15.297') خروجی 2018-12-20 09:17:15.297 است یعنی 5 روز به تاریخ اضافه میشود select DATEADD(HOUR,2,'2018-12-15 09:17:15.297') خروجی 2018-12-15 11:17:15.297 است یعنی 2 ساعت به زمان اضافه شده است select DATEADD(MINUTE,13,'2018-12-15 09:17:15.297') خروجی 2018-12-15 09:30:15.297 است یعنی 13 دقیقه به زمان اضافه شده است select DATEADD(SECOND,10,getdate()) خروجی 10 ثانیه به زمان جاری سیستم اضافه میکند select DATEADD(MILLISECOND,-200,'2018-12-15 09:17:15.297') خروجی 2018-12-15 09:17:15.097 است یعنی 200 میلی ثانیه از زمان کم شده است
سرفصلهای آموزش Sql
- 01 Sql Server | نصب Sql Server 2014 رایگان 05:14
- 02 Sql Server | آموزش Sql Server رایگان 05:47
- 03 Sql Server | دستور Select در Sql رایگان 06:52
- 04 Sql Server | دستور Where در Sql رایگان 08:12
- 05 Sql Server | عملگر Like در Sql رایگان 09:42
- 06 Sql Server | دستور Order By در Sql رایگان 07:07
- 07ویتامین استوایی | آموزش رایگان Sql Server عضویت 7 فیلم آموزشی
- 08 جادوی استوایی | آموزش کامل Sql Server خرید 41 فیلم آموزشی
سلام واقعا خیلی عالیه بود استاد دمت گرم
خواهش میکنم. سلامت باشی. خوشحالم که آموزش برای شما مفید بود.
سلام خسته نباشید
من در اسکوال کدهایی نوشتم و آوردم تو فست ریپورت و در اونجا مثلا 100تا فاکتور دارم با تاریخ های مختلف من می خوام چاپ بگیرم و بگم برای ار روز یه پرینت بگیر
میشه لطف کنید راهنماییم کنید ممنونم
سلام دوست عزیز. متاسفانه سوالتون رو متوجه نشدم و درباره پرینت گرفتن و… در جریان کاری که انجام میدید نیستم.
سلام وقت بخیر
داخل دیتابیس هر یک ثانیه یک رکورد ثبت میشه و من می خوام هر 30 ثانیه رکورد ها برداشت کنم چه راه حلی پیشنهاد می کنید؟
سلام دوست عزیز. سوالتون رو از مدرس sql پرسیدم. متاسفانه متوجه سوال شما نشد. اگر سوال رو واضح تر بپرسید شاید بتونن راهنماییتون کنن. به شخصه این سوال برام پیش اومد که در کجا برداشت کنید؟ و اینکه شاید راهنمایی کسی رو نیاز داشته باشید که در زمینه بیگ دیتا کار کرده باشن.