a

ABLY مقالات و مطالب مجموعه

تاریخ در SQL

تاریخ در SQL

بسم الله الرحمن الرحیم

همانطور که می دانید ما در SQL Server نوع داده ای با نام DateTime داریم. این نوع داده ای برای ذخیره اطلاعات تاریخ و ساعت در SQL Server استفاده می شود. در اینجا قصد داریم برخی از توابع مفید برای کار بر روی DateTime را بررسی کنیم.

بدست آوردن تاریخ جاری در SQL Server

برای بدست آوردن تاریخ و ساعت جاری سیستم می توانید از تابع زیر استفاده کنید

select  getdate()

DATEPART

بدست آوردن بخشی از یک تاریخ در SQL Server

اگر بخواهید بخشی از یک تاریخ و زمان را انتخاب کنید، (مثلا فقط روز یا فقط ساعت و....) می بایست از تابع DATEPART استفاده کنید این تابع دو پارامتر دریافت می کند.
پارامتر اول مشخص کننده بخشی از تاریخ و زمان که می بایست انتخاب شود و پارامتر دوم تاریخی است که شما می خواهید بر روی آن کار کنید.

DATEPART ( datepartEnum , yourDate )


به جای datepartEnum می توانید از مقادیر زیر استفاده کنید

datepart

بسم الله الرحمن الرحیم

همانطور که می دانید ما در SQL Server نوع داده ای با نام DateTime داریم. این نوع داده ای برای ذخیره اطلاعات تاریخ و ساعت در SQL Server استفاده می شود. در اینجا قصد داریم برخی از توابع مفید برای کار بر روی DateTime را بررسی کنیم.

بدست آوردن تاریخ جاری در SQL Server

برای بدست آوردن تاریخ و ساعت جاری سیستم می توانید از تابع زیر استفاده کنید

select  getdate()

DATEPART

بدست آوردن بخشی از یک تاریخ در SQL Server

اگر بخواهید بخشی از یک تاریخ و زمان را انتخاب کنید، (مثلا فقط روز یا فقط ساعت و....) می بایست از تابع DATEPART استفاده کنید این تابع دو پارامتر دریافت می کند.
پارامتر اول مشخص کننده بخشی از تاریخ و زمان که می بایست انتخاب شود و پارامتر دوم تاریخی است که شما می خواهید بر روی آن کار کنید.

DATEPART ( datepartEnum , yourDate )


به جای datepartEnum می توانید از مقادیر زیر استفاده کنید

datepart

Abbreviations

year

yy , yyyy

quarter

qq , q

month

mm , m

dayofyear

dy , y

day

dd , d

week

wk , ww

weekday

dw

hour

hh

minute

mi, n

second

ss , s

millisecond

ms

microsecond

mcs

nanosecond

ns

TZoffset

tz

ISO_WEEK

isowk , isoww




مثال

SELECT DATEPART(year, '12:10:30.123')
    ,DATEPART(month, '12:10:30.123')
    ,DATEPART(day, '12:10:30.123')
    ,DATEPART(dayofyear, '12:10:30.123')
    ,DATEPART(weekday, '12:10:30.123');


مثال

DECLARE @t time = '12:10:30.123'; 
SELECT DATEPART(year, @t);


مثال

SELECT DATEPART(millisecond, '00:00:01.1234567'); -- Returns 123
SELECT DATEPART(microsecond, '00:00:01.1234567'); -- Returns 123456
SELECT DATEPART(nanosecond,  '00:00:01.1234567'); -- Returns 123456700


برای تغییر فرمت نمایش تاریخ ها می توانید به صورت زیر عمل کنید

select convert(varchar,dateadd(day,-1,getdate()),103) --21/09/2011
select convert(varchar,dateadd(day,-1,getdate()),103) --09/21/2011
select convert(varchar,dateadd(day,-1,getdate()),111) --2011/09/2011

بدست آوردن تاریخ های خاص در SQL Server

اگر بخواهید تاریخ اولین روز هفته میلادی، اولین روز ماه میلادی، تاریخ روز گذشته و.. را بدست آورید می توانید از مثال های زیر کمک بگیرید

----Today
SELECT GETDATE() 'Today'
----Yesterday
SELECT DATEADD(d,-1,GETDATE()) 'Yesterday'
----First Day of Current Week
SELECT DATEADD(wk,DATEDIFF(wk,0,GETDATE()),0) 'First Day of Current Week'
----Last Day of Current Week
SELECT DATEADD(wk,DATEDIFF(wk,0,GETDATE()),6) 'Last Day of Current Week'
----First Day of Last Week
SELECT DATEADD(wk,DATEDIFF(wk,7,GETDATE()),0) 'First Day of Last Week'
----Last Day of Last Week
SELECT DATEADD(wk,DATEDIFF(wk,7,GETDATE()),6) 'Last Day of Last Week'
----First Day of Current Month
SELECT DATEADD(mm,DATEDIFF(mm,0,GETDATE()),0) 'First Day of Current Month'
----Last Day of Current Month
SELECT DATEADD(ms,- 3,DATEADD(mm,0,DATEADD(mm,DATEDIFF(mm,0,GETDATE())+1,0))) 'Last Day of Current Month'
----First Day of Last Month
SELECT DATEADD(mm,-1,DATEADD(mm,DATEDIFF(mm,0,GETDATE()),0)) 'First Day of Last Month'
----Last Day of Last Month
SELECT DATEADD(ms,-3,DATEADD(mm,0,DATEADD(mm,DATEDIFF(mm,0,GETDATE()),0))) 'Last Day of Last Month'
----First Day of Current Year
SELECT DATEADD(yy,DATEDIFF(yy,0,GETDATE()),0) 'First Day of Current Year'
----Last Day of Current Year
SELECT DATEADD(ms,-3,DATEADD(yy,0,DATEADD(yy,DATEDIFF(yy,0,GETDATE())+1,0))) 'Last Day of Current Year'
----First Day of Last Year
SELECT DATEADD(yy,-1,DATEADD(yy,DATEDIFF(yy,0,GETDATE()),0)) 'First Day of Last Year'
----Last Day of Last Year
SELECT DATEADD(ms,-3,DATEADD(yy,0,DATEADD(yy,DATEDIFF(yy,0,GETDATE()),0))) 'Last Day of Last Year'

ResultSet:

Today
———————–
2008-08-29 21:54:58.967

Yesterday
———————–
2008-08-28 21:54:58.967

First Day of Current Week
————————-
2008-08-25 00:00:00.000

Last Day of Current Week
————————
2008-08-31 00:00:00.000

First Day of Last Week
———————–
2008-08-18 00:00:00.000

Last Day of Last Week
———————–
2008-08-24 00:00:00.000

First Day of Current Month
————————–
2008-08-01 00:00:00.000

Last Day of Current Month
————————-
2008-08-31 23:59:59.997

First Day of Last Month
———————–
2008-07-01 00:00:00.000

Last Day of Last Month
———————–
2008-07-31 23:59:59.997

First Day of Current Year
————————-
2008-01-01 00:00:00.000

Last Day of Current Year
————————
2008-12-31 23:59:59.997

First Day of Last Year
———————–
2007-01-01 00:00:00.000

Last Day of Last Year
———————–
2007-12-31 23:59:59.997

DATEDIFF

مقایسه دو تاریخ در SQL Server

در صورتی که بخواهید دو تاریخ را با یکدگیر مقایسه کنید می توانید از تابع DATEDIFF استفاده نمایید.

این تابع سه پارارمتر دارد:
پارمتر اول مشخص کننده واحدی (سال، ماه، روز، ساعت و...) است که شما می خواهید بر اساس آن مقایسه انجام شود و پارامتر دوم و سوم تاریخ شما برای مقایسه می باشد.
به جای پارامتر اول می توانید از مقادیر مشخص شده در جدول زیر استفاده کنید.

datepart

Abbreviations

year

yy , yyyy

quarter

qq , q

month

mm , m

dayofyear

dy , y

day

dd , d

week

wk , ww

weekday

dw

hour

hh

minute

mi, n

second

ss , s

millisecond

ms

microsecond

mcs

nanosecond

ns

TZoffset

tz

ISO_WEEK

isowk , isoww


مثال

SELECT DATEDIFF(year, '2012/04/28', '2014/04/28');
Result: 2

SELECT DATEDIFF(yyyy, '2012/04/28', '2014/04/28');
Result: 2

SELECT DATEDIFF(yy, '2012/04/28', '2014/04/28');
Result: 2

SELECT DATEDIFF(month, '2014/01/01', '2014/04/28');
Result: 3

SELECT DATEDIFF(day, '2014/01/01', '2014/04/28');
Result: 117

SELECT DATEDIFF(hour, '2014/04/28 08:00', '2014/04/28 10:45');
Result: 2

SELECT DATEDIFF(minute, '2014/04/28 08:00', '2014/04/28 10:45');
Result: 165

datepart

Abbreviations

year

yy , yyyy

quarter

qq , q

month

mm , m

dayofyear

dy , y

day

dd , d

week

wk , ww

weekday

dw

hour

hh

minute

mi, n

second

ss , s

millisecond

ms

microsecond

mcs

nanosecond

ns

TZoffset

tz

ISO_WEEK

isowk , isoww

نظرات

  • Hannah Martinez
    دو شنبه 11 دی 1278 0:00

    با سلام.

    میخواستم اطلاعاتی در مورد دو تا از datepart ها به نام های tzoffset , iso_week از نحوه کارایی و استفاده انها کسب کنم.

    با تشکر از سایت خوبتون.

    • Judith Bell
      پاسخ
      دو شنبه 11 دی 1278 0:00

      با عرض سلام

       

      پارامتر ISO_WEEK  


      برای بازیابی شماره ی هفته از سال می باشد، که معمولا هر سالی بین 52 تا 53 هفته را دارد برای مثال 

      اولین هفته ی سال 2015 به صورت  2015W01 خواهد بود

       

      پارامتر TZoffset 

      تعدا دقیقه ای که از Time Zone مورد نظر گذشته است را بر می گرداند.

      در مثال زیر عدد 310 برگردانده می شود.

      
      SELECT DATEPART (TZoffset, 2007-05-10  00:00:01.1234567 +05:10);
      
      

       

      اطلاعات بیشتر را می توانید از طریق سایت MSDN مایکروسافت بدست آورید.

      https://msdn.microsoft.com/en-us/library/ms174420.aspx

       

  • Hannah Martinez
    دو شنبه 11 دی 1278 0:00

    خیلی ممنون.

  • Hannah Martinez
    مهران
    دو شنبه 11 دی 1278 0:00

    سلام

    مهندس من دارم سی شارپ یاد میگیرم.و میخوام تاریخ شمسی را به صورت میلادی در پایگاه داده ذخیره و به صورت شمسی در پروژه نمایش دهم در asp webform از چه کدهایی استفاده کنم و نوع تاریخ پایگاه داده از چه نوعی باشه؟

     

    ممنون میشم راهنماییم کنید.

  • Hannah Martinez
    دو شنبه 11 دی 1278 0:00

    با عرض سلام

    دو روش وجود دارد، یکی روش ثبت تاریخ شمسی و میلادی به صورت موازی در پایگاه داده که اصلا توصیه نمی شود و عملا بسیار اشتباه هست، روش دوم تاریخ و ساعت میلادی را از طریق DateTime ذخیره نمایید و سپس در برنامه سی شارپ خود هر زمان احتیاج داشتید آن را توسط کلاس IPersianDate مربوط به مایکروسافت تبدیل به شمسی نمایید.

    تبدیل تاریخ میلادی به شمسی در سی شارپ

    
    string GregorianDate = "Thursday, October 24, 2013";
    DateTime d = DateTime.Parse(GregorianDate);
    PersianCalendar pc = new PersianCalendar();
    Console.WriteLine(string.Format("{0}/{1}/{2}", pc.GetYear(d), pc.GetMonth(d), pc.GetDayOfMonth(d)));
    
    
    

نظرات یا سوالات خودرا با ما درمیان بگذارید

0912 097 5516 :Phone Number
0713 625 1757 :Phone Number