تاریخ در 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 |
محمد مهدیکفایی
با سلام.
میخواستم اطلاعاتی در مورد دو تا از datepart ها به نام های tzoffset , iso_week از نحوه کارایی و استفاده انها کسب کنم.
با تشکر از سایت خوبتون.
اسماعیلشیدایی
با عرض سلام
پارامتر ISO_WEEK
برای بازیابی شماره ی هفته از سال می باشد، که معمولا هر سالی بین 52 تا 53 هفته را دارد برای مثال
اولین هفته ی سال 2015 به صورت 2015W01 خواهد بود
پارامتر TZoffset
تعدا دقیقه ای که از Time Zone مورد نظر گذشته است را بر می گرداند.
در مثال زیر عدد 310 برگردانده می شود.
اطلاعات بیشتر را می توانید از طریق سایت MSDN مایکروسافت بدست آورید.
https://msdn.microsoft.com/en-us/library/ms174420.aspx
محمد مهدیکفایی
خیلی ممنون.
مهران
سلام
مهندس من دارم سی شارپ یاد میگیرم.و میخوام تاریخ شمسی را به صورت میلادی در پایگاه داده ذخیره و به صورت شمسی در پروژه نمایش دهم در asp webform از چه کدهایی استفاده کنم و نوع تاریخ پایگاه داده از چه نوعی باشه؟
ممنون میشم راهنماییم کنید.
مدیروب سایت
با عرض سلام
دو روش وجود دارد، یکی روش ثبت تاریخ شمسی و میلادی به صورت موازی در پایگاه داده که اصلا توصیه نمی شود و عملا بسیار اشتباه هست، روش دوم تاریخ و ساعت میلادی را از طریق DateTime ذخیره نمایید و سپس در برنامه سی شارپ خود هر زمان احتیاج داشتید آن را توسط کلاس IPersianDate مربوط به مایکروسافت تبدیل به شمسی نمایید.
تبدیل تاریخ میلادی به شمسی در سی شارپ