آموزش جامع SQL Server (جلسه ۲۷: توابع تاریخ یا Date - بخش ۱)
1398/04/17 14:24 , میلاد صاحب نظر

آموزش جامع SQL Server (جلسه ۲۷: توابع تاریخ یا Date - بخش ۱)

در این جلسه به کار با توابع تاریخ یا Date خواهیم پرداخت. در ادامه نمودار و لیستی از توابع تاریخ در SQL Server را مشاهده می‌کنید که به شما اجازه می‌دهند داده‌های تاریخ و زمان را به صورت مؤثر و کاربردی مدیریت کنید.

این مباحث در دو جلسه پوشش داده خواهند شد که مباحث هر جلسه به شرح زیر هستند.

توابع تاریخ و زمان

جلسه اول

توابع بازگرداننده تاریخ و زمان فعلی

تابع

توضیح

CURRENT_TIMESTAMP

تاریخ و زمان فعلی سیستم را بدون بخش محدوده زمانی بازمی‌گرداند.

GETUTCDATE

بخش تاریخ را به صورت یک عدد integer بازمی‌گرداند.

GETDATE

تاریخ و زمان فعلی سیستم‌ عاملی که SQL Server در حال اجرا شدن روی آن است را بازمی‌گرداند.

SYSDATETIME

تاریخ و زمان فعلی سیستم را همراه با دقت ثانیه‌های اعشار بیشتر نسبت به تابع ()GETDATE بازمی‌گرداند.

SYSUTCDATETIME

تاریخ و زمان سیستم فعلی در زمان UTC را بازمی‌گرداند.

SYSDATETIMEOFFSET

تاریخ و زمان سیستم فعلی همراه با محدوده زمانی را بازمی‌گرداند.

 

توابع بازگرداننده بخش‌های تاریخ و زمان

تابع

توضیح

DATENAME

بخش تاریخ را به عنوان یک کاراکتر رشته بازمی‌گرداند.

DATEPART

بخش تاریخ را به عنوان یک عدد integer بازمی‌گرداند.

DAY

روز یک تاریخ خاص را به عنوان یک عدد integer بازمی‌گرداند.

MONTH

ماه یک تاریخ خاص را به عنوان یک عدد integer بازمی‌گرداند.

YEAR

سال یک تاریخ را به عنوان یک عدد integer بازمی‌گرداند.

 

جلسه دوم

تابع بازگرداننده اختلاف بین دو تاریخ

تابع

مقدار بازگشتی

DATEDIFF

اختلاف در بخش تاریخ بین دو تاریخ را بازمی‌گرداند.

توابع تغییر دهنده تاریخ

تابع

توضیح

DATEADD

یک مقدار به بخش تاریخ اضافه می‌کند و مقدار تاریخ جدید را بازمی‌گرداند.

EOMONTH

آخرین روز ماه موجود در تاریخ مشخص شده را همراه با یک offset اختیاری بازمی‌گرداند.

SWITCHOFFSET

Offset منطقه زمانی یک مقدار DATETIMEOFFSET را تغییر می‌دهد و مقدار UTC را حفظ می‌کند.

TODATETIMEOFFSET

یک مقدار DATETIME2 را به یک مقدار DATETIMEOFFSET تبدیل می‌کند.

 

توابع ایجاد تاریخ و زمان از بخش‌های مخصوص به خودشان

تابع

توضیح

DATEFROMPARTS

یک مقدار DATE از سال، ماه و روز بازمی‌گرداند.

DATETIME2FROMPARTS

یک مقدار DATETIME2 از آرگومان‌های تاریخ و زمان بازمی‌گرداند.

DATETIMEOFFSETFROMPARTS

یک مقدار DATETIMEOFFSET از آرگومان‌های تاریخ و زمان بازمی‌گرداند.

TIMEFROMPARTS

یک مقدار TIME از بخش‌های زمان همراه با دقت بیشتر بازمی‌گرداند.

 

تابع ارزیابی مقادیر تاریخ و زمان

تابع

توضیح

ISDATE

بررسی می‌کند که آیا یک مقدار یک تاریخ، زمان یا Datetime معتبر هست یا نه.

 

در ادامه به توضیح موارد جلسه اول خواهیم پرداخت.

تابع CURRENT_TIMESTAMP در SQL Server

تابع CURRENT_TIMESTAMP برچسب زمان سیستم عامل سروری که SQL Server Database روی آن اجرا می‌شود را بازمی‌گرداند. برچسب زمان بازگشتی یک مقدار DATETIME بدون offset محدوده زمانی است.

تابع CURRENT_TIMESTAMP هیچ آرگومانی نمی‌گیرد:

CURRENT_TIMESTAMP

CURRENT_TIMESTAMP یک معادل ANSI SQL برای ()GETDATE است.

می‌توانید از تابع CURRENT_TIMESTAMP در هر جایی که یک عبارت DATETIME قابل قبول باشد، استفاده کنید.

مثال‌های تابع CURRENT_TIMESTAMP در SQL Server

اجازه دهید چند مثال برای استفاده از تابع CURRENT_TIMESTAMP حل کنیم.

الف) مثال ساده CURRENT_TIMESTAMP

مثال زیر از تابع CURRENT_TIMESTAMP برای بازگرداندن تاریخ و زمان فعلی استفاده می‌کند:

SELECT 
    CURRENT_TIMESTAMP AS current_date_time;

خروجی به این ترتیب است:

current_date_time
-----------------------
2019-02-23 20:02:21.550
 
(1 row affected)
ب) مثال استفاده از تابع CURRENT_TIMESTAMP به عنوان یک مقدار پیش‌فرض برای ستون‌های جدول

ابتدا، یک جدول جدید به نام current_timestamp_demos ایجاد می‌کنیم که ستون created_at در آن یک مقدار پیش‌فرض را به عنوان برچسب زمان می‌پذیرد که در آن یک تابع اضافه شده است:

CREATE TABLE current_timestamp_demos
(
    id         INT IDENTITY, 
    msg        VARCHAR(255) NOT NULL, 
    created_at DATETIME NOT NULL
                DEFAULT CURRENT_TIMESTAMP, 
    PRIMARY KEY(id)
);

 سپس،دو ردیف به جدول اضافه می‌کنیم:

INSERT INTO current_timestamp_demos(msg)
VALUES('This is the first message.');
 
INSERT INTO current_timestamp_demos(msg)
VALUES('current_timestamp demo');

در آخر، داده‌ها را از جدول current_timestamp_demos به دست می‌آوریم:

SELECT 
    id, 
    msg, 
    created_at
FROM 
    current_timestamp_demos;

خروجی به این شکل است:

نتایج

همان‌طور که به وضوح در خروجی مشاهده می‌کنید، مقادیر موجود در ستون created_at مقدار برچسب زمان بازگشتی توسط تابع CURRENT_TIMESTAMP را می‌گیرند.

در نتیجه، چگونگی استفاده از تابع CURRENT_TIMESTAMP برای بازگرداندن برچسب زمان سیستم پایگاه داده به عنوان یک مقدار DATETIME را آموختید.

تابع GETUTCDATE در SQL Server

تابع ()GETUTCDATE زمان UTC فعلی را بازمی‌گرداند. تابع ()GETUTCDATE این مقدار را از سیستم ‌عاملی که SQL Server در آن اجرا می‌شود، محاسبه می‌کند.

تابع ()GETUTCDATE دارای Syntax زیر است:

GETUTCDATE()

مثال ()GETUTCDATE در SQL Server

این مثال از توابع ()GETDATE، GETUTCDATE() و ()DATEDIFF برای بازگرداندن زمان محلی، زمان UTC و محدوده زمانی سرور استفاده می‌کند:

DECLARE 
    @local_time DATETIME,
    @utc_time DATETIME;
 
SET @local_time = GETDATE();
SET @utc_time = GETUTCDATE();
 
SELECT 
    CONVERT(VARCHAR(40), @local_time) 
        AS 'Server local time';
SELECT 
    CONVERT(VARCHAR(40), @utc_time) 
        AS 'Server UTC time'
SELECT 
    CONVERT(VARCHAR(40), DATEDIFF(hour, @utc_time, @local_time)) 
        AS 'Server time zone';
GO

در این مثال، چگونگی استفاده از تابع ()GETUTCDATE برای به دست آوردن زمان UTC فعلی را آموختید.

تابع GETDATE در SQL Server

تابع ()GETDATE برچسب زمان فعلی سیستم را به عنوان یک مقدار DATETIME بدون offset منطقه زمانی پایگاه داده بازمی‌گرداند. مقدار DATETIME از سیستم عامل سرور به دست می‌آید که نمونه SQL Server در آن اجرا می‌شود.

کد زیر syntax تابع ()GETDATE را نشان می‌دهد:

GETDATE()

توجه کنید که تابع ()GETDATE یک تابع غیر متمرکز است، از این رو، نمی‌توانید برای ستون‌هایی که این تابع را رفرنس کرده‌اند یک index در viewها ایجاد کنید.

مثال‌های ()GETDATE در SQL Server

اجازه دهید چند مثال برای استفاده از تابع ()GETDATE حل کنیم.

الف) مثال استفاده از تابع ()GETDATE برای به دست آوردن تاریخ و زمان فعلی

این مثال از تابع ()GETDATE  برای بازگرداندن تاریخ و زمان فعلی سیستم عاملی که SQL Server روی آن اجرا می‌شود، استفاده می‌کند:

SELECT 
    GETDATE() current_date_time;

خروجی به این شکل است:

current_date_time
-----------------------
2019-04-28 15:13:26.270
 
(1 row affected)
ب) مثال استفاده از تابع ()GETDATE برای به دست آوردن تاریخ فعلی سیستم

برای به دست آوردن تاریخ فعلی، می‌توانید از تابع ()CONVERT (که در بخش توابع سیستمی توضیح داده خواهد شد) برای تبدیل مقدار DATETIME به یک مقدار DATE استفاده کنید که در کد زیر مشاهده می‌کنید:

SELECT 
    CONVERT(DATE, GETDATE()) [Current Date];

کد زیر نیز خروجی را نشان می‌دهد:

Current Date
------------
2019-04-28
 
(1 row affected)

به طور مشابه، می‌توانید از توابع ()TRY_CONVERT و ()CAST برای تبدیل نتیجه تابع ()GETDATE به یک تاریخ استفاده کنید:

SELECT 
    TRY_CONVERT(DATE, GETDATE()),
    CAST(GETDATE() AS DATE);
پ) مثال استفاده از تابع ()GETDATE برای به دست آوردن زمان فعلی سیستم

برای به دست آوردن زمان فعلی، می‌توانید  از تابع ()CONVERT()، TRY_CONVERT يا ()CAST برای تبدیل نتیجه تابع ()GETDATE به یک زمان استفاده کنید:

SELECT 
    CONVERT(TIME,GETDATE()),
    TRY_CONVERT(TIME, GETDATE()),
    CAST(GETDATE() AS TIME);

به این شکل، چگونگی استفاده از تابع ()GETDATE برای بازگرداندن تاریخ و زمان فعلی سیستم را نیز آموختید.

تابع SYSDATETIME در SQL Server

تابع ()SYSDATETIME یک مقدار DATETIME2 را بازمی‌گرداند که نشان دهنده تاریخ و زمان فعلی سروری است که نمونه SQL Server در آن اجرا می‌شود.

تابع ()SYSDATETIME هیچ پارامتری نمی‌گیرد:

SYSDATETIME()

خروجی به این شکل است:

Result
---------------------------
2019-05-02 22:22:33.3975855
 
(1 row affected)

توجه کنید که تابع ()SYSDATETIME دارای دقت ثانیه‌های اعشاری بیشتری نسبت به تابع ()GETDATE است.

()SYSDATETIME یک تابع غیر متمرکز است، از این رو، viewها و ستون‌هایی که دارای عبارات رفرنسی به سمت این تابع هستند را نمی‌توان index گذاری کرد.

مثال‌های تابع ()SYSDATETIME در SQL Server

بیایید چند مثال برای استفاده از تابع ()SYSDATETIME حل کنیم.

الف) مثال بازگرداندن تاریخ فعلی سیستم

این مثال از تابع ()CONVERT برای تبدیل نتیجه تابع ()SYSDATETIME به تاریخ فعلی استفاده می‌کند:

SELECT 
    CONVERT(DATE, SYSDATETIME());

نتیجه به این صورت است:

Result
----------
2019-05-02
 
(1 row affected)
ب) بازگرداندن زمان فعلی سیستم

مثال زیر نتیجه تابع ()SYSDATETIME را به زمان فعلی تبدیل می‌کند:

SELECT 
    CONVERT(TIME, SYSDATETIME()) Result;

خروجی به این شکل است:

Result
----------------
22:32:07.2066595
 
(1 row affected)

به این شکل، چگونگی استفاده از تابع ()SYSDATETIME برای به دست آوردن تاریخ و زمان فعلی را نیز آموختید.

تابع SYSUTCDATETIME در SQL Server

تابع ()SYSTCDATETIME یک مقدار DATETIME2 بازمی‌گرداند که تاریخ و زمان فعلی سروری که نمونه SQL Server روی آن اجرا می‌شود را نشان می‌دهد. Datetime به فرمت زمان هماهنگی جهانی (UTC) می‌باشد.

Syntax تابع ()SYSTCDATETIME به صورت زیر است:

SYSUTCDATETIME()

برای مثال، برای به دست آوردن تاریخ و زمان فعلی در UTC، می‌توانید از کد زیر استفاده کنید:

SELECT 
   SYSUTCDATETIME() utc_time;

خروجی به این صورت است:

2019-05-03 00:50:06.1821224

توجه کنید که تابع ()SYSTCDATETIME دارای دقت ثانیه‌های اعشاری بیشتری نسبت به تابع ()GETUTCDATE است.

مثال‌های تابع ()SYSTCDATETIME در SQL Server

اجازه دهید چند مثال برای استفاده از تابع ()SYSTCDATETIME حل کنیم.

الف) مثال بازگرداندن تاریخ فعلی به فرم زمان UTC

مثال زیر از تابع ()CONVERT برای تبدیل نتیجه تابع ()SYSTCDATETIME به تاریخ فعلی به فرم زمان UTC استفاده می‌کند:

SELECT 
    CONVERT(DATE, SYSUTCDATETIME()) utc_date;

خروجی به این شکل است:

utc_date
----------
2019-05-03
 
(1 row affected)
ب) مثال بازگرداندن زمان فعلی به فرم زمان UTC

این مثال نتیجه تابع ()SYSTCDATETIME را به تاریخ فعلی به فرم زمان UTC تبدیل می‌کند:

SELECT 
    CONVERT(DATE, SYSUTCDATETIME()) utc_time;

خروجی به این شکل است:

utc_time
----------
2019-05-03
 
(1 row affected)

به این صورت چگونگی استفاده از تابع ()SYSTCDATETIME برای به دست آوردن تاریخ و زمان فعلی به فرم زمان UTC را آموختید.

تابع SYSDATETIMEOFFSET در SQL Server

تابع ()SYSDATETIMEOFFSET یک مقدار DATETIMEOFFSET(7) را بازمی‌گرداند که تاریخ و زمان فعلی را نشان می‌دهد و همچنین شامل منطقه زمانی رایانه‌ای که نمونه SQL Server روی آن اجرا می‌شود نیز هست.

کد زیر syntax تابع ()SYSDATETIMEOFFSET را نشان می‌دهد:

SYSDATETIMEOFFSET()

برای مثال، برای به دست آوردن تاریخ و زمان فعلی همراه با منطقه زمانی سروری که به آن متصل هستید، می‌توانید از کد زیر استفاده کنید:

SELECT 
    SYSDATETIMEOFFSET() [datetimeoffset with timezone];

خروجی به این شکل است:

datetimeoffset with timezone
----------------------------------
2019-05-03 08:56:48.0645108 +07:00
 
(1 row affected)

مثال‌های تابع ()SYSDATETIMEOFFSET در SQL Server

بیایید چند مثال برای استفاده از تابع ()SYSDATETIMEOFFSET حل کنیم.

الف) مثال استخراج offset منطقه زمانی

مثال زیر از تابع ()DATEPART برای بازگرداندن offset منطقه زمانی استفاده کرده است. این مثال یک integer بازمی‌گرداند که نشان دهنده offset منطقه زمانی به دقیقه است.

SELECT 
    SYSDATETIMEOFFSET() AS [System DateTime Offset],
    DATEPART(TZoffset, SYSDATETIMEOFFSET()) AS [Timezone Offset];

خروجی به این شکل است:

System DateTime Offset             Timezone Offset
---------------------------------- ---------------
2019-05-03 09:07:30.4093274 +07:00 420
 
(1 row affected)
ب) مثال فرمت بندی offset منطقه زمانی

این مثال offset منطقه زمانی بازگشتی را با استفاده از تابع ()FORMAT و آرگومان‌های zz و zzz به شکل رشته بازمی‌گرداند:

SELECT 
    SYSDATETIMEOFFSET() AS 'System Date Time Offset', 
    FORMAT(SYSDATETIMEOFFSET(), 'zz') AS 'zz', 
    FORMAT(SYSDATETIMEOFFSET(), 'zzz') AS 'zzz';

تصویر زیر، خروجی را نشان می‌دهد:

نتایج

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

تابع DATENAME در SQL Server

تابع ()DATENAME یک رشته (نوع NVARCHAR) بازمی‌گرداند که نشان دهنده یک بخش تاریخ خاص است (یعنی سال، ماه و روز یک تاریخ خاص).

کد زیر syntax تابع ()DATENAME را نشان می‌دهد:

DATENAME(date_part,input_date)

تابع ()DATENAME دو آرگومان می‌پذیرد:

  • Date_part بخشی از تاریخ است که می‌خواهید بازگشت داده شود. جدول زیر تمام مقادیر بخش تاریخ معتبر را لیست کرده است.

  • Input_date یک تاریخ لفظی یا یک عبارت است که می‌توانیم آن را به یک مقدار DATETIME2، DATETIME، SMALLDATETIME، DATE، TIME یا DATETIMEOFFSET تبدیل کنیم.

Date_part

اختصارات

سال

yy, yyyy

ربع سال

qq, q

ماه

mm, m

روز از سال

dy, y

روز

dd, d

هفته

wk, ww

روز از هفته

dw

ساعت

hh

دقیقه

mi, n

ثانیه

ss, s

میلی ثانیه

ms

میکرو ثانیه

mcs

نانو ثانیه

ns

Tzoffset

tz

ISO_WEEK

isowk, isoww

 

()DATENAME در برابر ()DATEPART

توجه کنید که ()DATENAME  از لحاظ نوع بازگشتی، شبیه به ()DATEPART است. تابع ()DATENAME بخش تاریخ را به عنوان یک کاراکتر رشته بازمی‌گرداند، در حالی که ()DATEPART بخش تاریخ را به عنوان یک integer بازمی‌گرداند.

مثال زیر را ببینید:

SELECT
    DATEPART(year, '2018-05-10') [datepart], 
    DATENAME(year, '2018-05-10') [datename];

خروجی مشابه است:

datepart    datename
----------- -----------
2018        2018
 
(1 row affected)

به هر حال، نوع‌های داده‌ای آن‌ها همان‌طور که در مثال زیر مشاهده می‌کنید، متفاوت هستند:

SELECT
    DATEPART(year, '2018-05-10') + '1' [datepart], 
    DATENAME(year, '2018-05-10') + '1' [datename] ;

کد زیر نتیجه را نشان می‌دهد:

datepart    datename
----------- -----------
2019        20181
 
(1 row affected)

چون تابع ()DATEPART یک integer بازمی‌گرداند، پس مقدار عبارت برابر با 2019 (1 + 2018) می‌شود. به هر حال، تابع ()DATENAME یک رشته کاراکتر بازمی‌گرداند، از این رو، علامت + به عنوان یک عملگر تلفیقی عمل می‌کند و نتیجه آن ‘20181’ (یعنی 1 + 2018) است. 

مثال تابع ()DATENAME در SQL Server

این مثال از تابع ()DATENAME برای بازگرداندن بخش‌های تاریخ مختلف از  '08:10 + 1234567. 10:20:30 02-10-2020' استفاده می‌کند:

DECLARE @dt DATETIME2= '2020-10-02 10:20:30.1234567 +08:10';
 
SELECT 'year,yyy,yy' date_part, 
    DATENAME(year, @dt) result
UNION
SELECT 'quarter, qq, q', 
    DATENAME(quarter, @dt)
UNION
SELECT 'month, mm, m', 
    DATENAME(month, @dt)
UNION
SELECT 'dayofyear, dy, y', 
    DATENAME(dayofyear, @dt)
UNION
SELECT 'day, dd, d', 
    DATENAME(day, @dt)
UNION
SELECT 'week, wk, ww', 
    DATENAME(week, @dt)
UNION
SELECT 'weekday, dw, w', 
    DATENAME(week, @dt)
UNION
SELECT 'hour, hh' date_part, 
    DATENAME(hour, @dt)
UNION
SELECT 'minute, mi,n', 
    DATENAME(minute, @dt)
UNION
SELECT 'second, ss, s', 
    DATENAME(second, @dt)
UNION
SELECT 'millisecond, ms', 
    DATENAME(millisecond, @dt)
UNION
SELECT 'microsecond, mcs', 
    DATENAME(microsecond, @dt)
UNION
SELECT 'nanosecond, ns', 
    DATENAME(nanosecond, @dt)
UNION
SELECT 'TZoffset, tz', 
    DATENAME(tz, @dt)
UNION
SELECT 'ISO_WEEK, ISOWK, ISOWW', 
    DATENAME(ISO_WEEK, @dt);

خروجی به این ترتیب است:

date_part              result
---------------------- -----------
day, dd, d             2
dayofyear, dy, y       276
hour, hh               10
ISO_WEEK, ISOWK, ISOWW 40
microsecond, mcs       123456
millisecond, ms        123
minute, mi,n           20
month, mm, m           October
nanosecond, ns         123456700
quarter, qq, q         4
second, ss, s          30
TZoffset, tz           +00:00
week, wk, ww           40
weekday, dw, w         40
year,yyy,yy            2020
 
(15 rows affected)

در نتیجه، چگونگی استفاده از تابع ()DATENAME برای استخراج یک بخش تاریخ به عنوان یک رشته کاراکتر از یک تاریخ را‌ آموختید.

تابع DATEPART در SQL Server

تابع ()DATEPART یک integer بازمی‌گرداند که بخشی از یک تاریخ مانند روز، ماه و سال است.

کد زیر syntax تابع ()DATEPART را نشان می‌دهد:

DATEPART ( date_part , input_date )

()DATEPART دو آرگومان می‌گیرد:

  • Date_part بخشی از یک تاریخ است که باید استخراج شود. (بخش‌های معتبر تاریخ را در جدول زیر مشاهده می‌کنید).

  • Input_date تاریخی است که از آن بخش تاریخ استخراج می‌شود.

Date_part

اختصارات

سال

yy, yyyy

ربع سال

qq, q

ماه

mm, m

روز از سال

dy, y

روز

dd, d

هفته

wk, ww

روز از هفته

dw

ساعت

hh

دقیقه

mi, n

ثانیه

ss, s

میلی ثانیه

ms

میکرو ثانیه

mcs

نانو ثانیه

ns

Tzoffset

tz

ISO_WEEK

isowk, isoww

 

مثال‌های ()DATEPART در SQL Server

اجازه دهید چند مثال برای استفاده از تابع ()DATEPART حل کنیم.

الف) استفاده از تابع ()DATEPART همراه با متغیرها

این مثال از تابع ()DATEPART برای استخراج بخش‌های مختلف یک مقدار تاریخ ذخیره شده در یک متغیر استفاده می‌کند:

DECLARE @d DATETIME = '2019-01-01 14:30:14';
SELECT 
   DATEPART(year, @d) year, 
   DATEPART(quarter, @d) quarter, 
   DATEPART(month, @d) month, 
   DATEPART(day, @d) day, 
   DATEPART(hour, @d) hour, 
   DATEPART(minute, @d) minute, 
   DATEPART(second, @d) second;

خروجی به این ترتیب است:

نتایج

ب) مثال استفاده از تابع ()DATEPART همراه با ستون‌های جدول

از جداول sales.orders و sales.order_items در پایگاه داده نمونه Bikestores برای این مثال استفاده می‌کنیم:

جداول sales.orders و sales.order_items

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

SELECT DATEPART(year, shipped_date) [year], 
       DATEPART(quarter, shipped_date) [quarter], 
       DATEPART(month, shipped_date) [month], 
       DATEPART(day, shipped_date) [day], 
       SUM(quantity * list_price) gross_sales
FROM sales.orders o
     INNER JOIN sales.order_items i ON i.order_id = o.order_id
WHERE shipped_date IS NOT NULL
GROUP BY DATEPART(year, shipped_date), 
         DATEPART(quarter, shipped_date), 
         DATEPART(month, shipped_date), 
         DATEPART(day, shipped_date)
ORDER BY [year] DESC, 
         [quarter], 
         [month], 
         [day];

بخشی از خروجی به شکل زیر است:

نتایج

در این مثال، ما از تابع ()DATEPART برای استخراج سال، ربع سال، ماه و روز از مقادیر موجود در ستون shipped_date استفاده کردیم. در دستور GROUP BY، ما نرخ‌های رشد فروش (quuantity * list_price) را با استفاده از این بخش‌های تاریخ جمع‌آوری کردیم.

توجه کنید که می‌توانید از تابع ()DATEPART در دستورهای GROUP BY، HAVING، WHERE، SELECT و ORDER BY استفاده کنید.

در نتیجه، چگونگی استفاده از ()DATEPART برای استخراج یک بخش تاریخ از یک تاریخ را آموختید.

تابع DAY در SQL Server

تابع ()DAY یک مقدار integer بازمی‌گرداند که روز یک ماه (از 1 تا 31) از یک تاریخ مشخص شده را نشان می‌دهد.

کد زیر syntax تابع ()DAY را نشان می‌دهد:

DAY(input_date)

تابع ()DAY یک آرگومان می‌گیرد که این آرگومان می‌تواند یک تاریخ یا یک عبارت باشد که به صورت مقدار DATETIME2، DATETIME، SMALLDATETIME، DATE، TIME یا DATETIMEOFFSET استفاده شود.

تابع ()DAY مقدار مشابه با تابع ()DATEPART که در زیر مشاهده می‌کنید بازمی‌گرداند:

DATEPART(day,input_date)

مثال‌های تابع ()DAY در SQL Server

اجازه دهید چند مثال برای استفاده از تابع ()DAY حل کنیم.

الف) مثال استفاده از تابع ()DAY با یک مقدار تاریخ

این مثال از تابع ()DAY برای استخراج روز از تاریخ ‘2030-12-01’ استفاده می‌کند:

SELECT 
 DAY('2030-12-01') [DAY];

خروجی به این شکل است:

DAY
-----------
1
 
(1 row affected)
ب) مثال استفاده از تابع ()DAY با یک مقدار تاریخ که فقط دارای بخش زمان است

تابع ()DAY در صورتی که تاریخ ورودی شامل فقط بخش زمان باشد، مقدار 1 را بازمی‌گرداند:

SELECT 
 DAY('10:20:30') [DAY];

کد زیر، خروجی را نشان می‌دهد:

DAY
-----------
1
 
(1 row affected)
پ) مثال استفاده از تابع ()DAY با ستون‌های جدول

از جداول sales.orders و sales.order_items برای مثال استفاده می‌کنیم:

جداول sales.orders و sales.order_items

در این مثال از تابع ()DAY برای استخراج داده روز از مقادیر موجود در ستون shipperd_date استفاده شده است. این مثال با استفاده از تابع ()SUM و دستور GROUP BY، نرخ‌های رشد فروش را بر اساس روز در فوریه ۲۰۱۷ بازمی‌گرداند:

SELECT 
    DAY(shipped_date) [day], 
    SUM(list_price * quantity) gross_sales
FROM 
    sales.orders o
    INNER JOIN sales.order_items i ON i.order_id = o.order_id
WHERE 
    shipped_date IS NOT NULL
    AND YEAR(shipped_date) = 2017
    AND MONTH(shipped_date) = 2
GROUP BY 
    DAY(shipped_date)
ORDER BY 
    [day];

تصویر زیر، خروجی را نشان می‌دهد:

نتایج

در این قسمت، چگونگی استخراج روز از یک تاریخ مشخص شده با استفاده از تابع ()DAY را آموختید.

تابع MONTH در SQL Server

تابع ()MONTH یک مقدار integer بازمی‌گرداند که نشان دهنده ماه از یک تاریخ مشخص شده است.

کد زیر syntax تابع ()MONTH را نشان می‌دهد:

MONTH(input_date)

تابع ()MONTH یک آرگومان می‌گیرد که می‌تواند یک مقدار تاریخ یا یک عبارت باشد که دارای مقدار DATETIME2، DATETIME، SMALLDATETIME، DATE، TIME یا DATETIMEOFFSET است.

تابع ()MONTH مقدار مشابهی با تابع ()DATEPART بازمی‌گرداند:

DATEPART(month,input_date)

مثال‌های تابع ()MONTH در SQL Server

چند مثال برای استفاده از ()MONTH حل می‌کنیم.

الف) استفاده از تابع ()MONTH با یک مقدار تاریخ

این مثال از تابع ()MONTH برای استخراج ماه از تاریخ ‘2020-12-01’ استفاده می‌کند:

SELECT 
 MONTH('2020-12-01') [month];

خروجی به این شکل است:

month
-----------
12
 
(1 row affected)
ب) استفاده از تابع ()MONTH با یک مقدار تاریخ که فقط دارای داده زمان است

تابع ()MONTH در صورتی که مقدار تاریخ شامل فقط بخش زمان باشد، مقدار 1 را بازمی‌گرداند:

SELECT 
 MONTH('15:30:20') [month];

خروجی به این ترتیب است:

month
-----------
1
 
(1 row affected)
پ) استفاده از تابع()MONTH با ستون‌های جدول

طبق معمول از جداول Sales.orders و Sales.order_items برای مثال استفاده می‌کنیم.

جداول Sales.orders و Sales.order_items

این مثال از تابع ()MONTH برای استخراج داده ماه از مقادیر موجود در ستون shipped_date استفاده می‌کند. نتیجه این مثال، نرخ رشد فروش بر اساس ماه در سال 2018 است که با استفاده از تابع ()SUM و دستور GROUP BY به دست می‌آیند:

SELECT MONTH(shipped_date) [month], 
    SUM(list_price * quantity) gross_sales
FROM sales.orders o
    INNER JOIN sales.order_items i ON i.order_id = o.order_id
WHERE shipped_date IS NOT NULL
    AND YEAR(shipped_date) = 2017
GROUP BY MONTH(shipped_date)
ORDER BY [month];

تصویر زیر، خروجی را نشان می‌دهد:

نتایج

به این شکل، چگونگی استخراج ماه از یک تاریخ مشخص شده با استفاده از تابع ()MONTH را آموختید.

تابع YEAR در SQL Server

تابع ()YEAR یک مقدار integer بازمی‌گرداند که نشان دهنده ماه از یک تاریخ مشخص شده است.

کد زیر syntax تابع  ()YEAR را نشان می‌دهد:

YEAR(input_date)

تابع  ()YEAR یک آرگومان می‌گیرد که می‌تواند یک مقدار تاریخ یا یک عبارت باشد که دارای مقدار DATETIME2، DATETIME، SMALLDATETIME، DATE، TIME یا DATETIMEOFFSET است.

تابع  ()YEAR مقدار مشابهی با تابع ()DATEPART بازمی‌گرداند:

DATEPART(year,input_date)

مثال‌های تابع  ()YEAR در SQL Server

چند مثال برای استفاده از  ()YEAR حل می‌کنیم.

الف) استفاده از تابع  ()YEAR با یک مقدار تاریخ

این مثال از تابع  ()YEAR برای استخراج ماه از تاریخ ‘2019-02-01’ استفاده می‌کند:

SELECT 
 YEAR('2019-02-01') [year];

خروجی به این شکل است:

year
-----------
2019
 
(1 row affected)
ب) استفاده از تابع  ()YEAR با یک مقدار تاریخ که فقط دارای بخش زمان است

اگر مقدار داده ورودی فقط دارای داده زمان باشد، تاب  ()YEAR مقدار 1900 را بازمی‌گرداند:

SELECT 
 YEAR('11:05:01') [year];

خروجی به این ترتیب است:

year
-----------
1900
 
(1 row affected)
پ) استفاده از تابع  ()YEAR با ستون‌های جدول

باز هم از جداول Sales.orders و Sales.order_items برای مثال استفاده می‌کنیم.

جداول Sales.orders و Sales.order_items

این مثال از تابع  ()YEAR برای استخراج داده ماه از مقادیر موجود در ستون shipped_date استفاده می‌کند. نتیجه این مثال، نرخ رشد فروش بر اساس سال است که با استفاده از تابع ()SUM و دستور GROUP BY به دست می‌آیند:

SELECT YEAR(shipped_date) [year], 
    SUM(list_price * quantity) gross_sales
FROM sales.orders o
 INNER JOIN sales.order_items i ON i.order_id = o.order_id
WHERE shipped_date IS NOT NULL
GROUP BY YEAR(shipped_date)
order by [year];

کد زیر، خروجی را نشان می‌دهد:

year        gross_sales
----------- -----------
2016        2649649.97
2017        3725890.76
2018        1062469.33
 
(3 rows affected)

به این شکل، چگونگی استخراج ماه از یک تاریخ مشخص شده با استفاده از تابع  ()YEAR را آموختید.

خلاصه

در این جلسه وارد مبحث بسیار کاربردی و البته مشکل توابع مرتبط با تاریخ  و زمان در SQL Server شدیم. قرار بر این شد که این مبحث در دو جلسه پوشش داده شود.

در این جلسه توابع MONTH، DAY، DATEPART، DATENAME، SYSDATETIMEOFFSET، SYSUTCDATETIME، SYSDATETIME، GETDATE، GETUTCDATE، CURRENT_TIMESTAMP و YEAR توضیح داده شدند و برای همه مثال حل شد. مباحث باقی‌مانده نیز در جلسه بعدی توضیح داده خواهند شد.

با MUG همراه باشید!

 منبع: sqlservertutorial

 مطالب مرتبط

۱۳ دستور مهم SQL که هر برنامه‌نویس باید بداند
چگونه از حملات نفوذ کننده به SQL جلوگیری کنیم؟
 طبقه بندی زبان های برنامه نویسی
روش‌های هوشمندانه برای استفاده از "تلفیق" در SQL
 LINQ(زبان جستجوی یکپارچه)
برنامه نویسی شیءگرا چیست؟

از آخرین دوره های آموزشی و تخفیف ها مطلع شوید

با تکمیل فرم زیر ، از اخبار و اطلاعات به روز برنامه نویسی و تکنولوژی عقب نمانید

آخرین مطالب

آموزش جامع SQL Server (جلسه ۳۱: توابع رشته‌ای – بخش ۳)
آموزش جامع SQL Server (جلسه ۳۱: توابع رشته‌ای – بخش ۳)

در جلسه قبل بخش ۲ مطالب مبحث توابع رشته‌ای یا string را به صورت کامل توضیح دادیم. و ...

آموزش جامع SQL Server (جلسه ۳۰: توابع رشته‌ای – بخش ۲)
آموزش جامع SQL Server (جلسه ۳۰: توابع رشته‌ای – بخش ۲)

در جلسه قبل، مبحث توابع رشته‌ای یا String را آغاز کردیم. به دلیل ازدیاد این توابع و برای ...

با Visual Studio Code’s Live Share گروهی برنامه‌نویسی کنیم!
با Visual Studio Code’s Live Share گروهی برنامه‌نویسی کنیم!

چه در مراحل اولیه یادگیری یک زبان برنامه‌نویسی باشید یا یک کد نویس با تجربه و ماهر باشید، ...

آخرین دیدگاه ها

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

فرم ارسال نظرات