توابع تاریخ در Sql Server | استوایی | ostovaee

توابع تاریخ در Sql

در هر پایگاه داده حداقل یک فیلد از نوع تاریخ وجود دارد که لازم است در دستورات از آن استفاده شود. در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 Server | استوایی

دریافت تاریخ روز در 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 Server |استوایی

تابع اختلاف تاریخ در 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

6 نظر برای توابع تاریخ در Sql ثبت شده

  1. سلام واقعا خیلی عالیه بود استاد دمت گرم

    1. خواهش میکنم. سلامت باشی. خوشحالم که آموزش برای شما مفید بود.

  2. سلام خسته نباشید
    من در اسکوال کدهایی نوشتم و آوردم تو فست ریپورت و در اونجا مثلا 100تا فاکتور دارم با تاریخ های مختلف من می خوام چاپ بگیرم و بگم برای ار روز یه پرینت بگیر
    میشه لطف کنید راهنماییم کنید ممنونم

    1. سلام دوست عزیز. متاسفانه سوالتون رو متوجه نشدم و درباره پرینت گرفتن و… در جریان کاری که انجام میدید نیستم.

  3. سلام وقت بخیر
    داخل دیتابیس هر یک ثانیه یک رکورد ثبت میشه و من می خوام هر 30 ثانیه رکورد ها برداشت کنم چه راه حلی پیشنهاد می کنید؟

    1. سلام دوست عزیز. سوالتون رو از مدرس sql پرسیدم. متاسفانه متوجه سوال شما نشد. اگر سوال رو واضح تر بپرسید شاید بتونن راهنماییتون کنن. به شخصه این سوال برام پیش اومد که در کجا برداشت کنید؟ و اینکه شاید راهنمایی کسی رو نیاز داشته باشید که در زمینه بیگ دیتا کار کرده باشن.

دیدگاهتان را بنویسید

پر کردن تمام موارد زیر الزامیست