آموزشگاه برنامه نویسی تحلیل داده
آموزشگاه برنامه نویسی تحلیل داده

آموزش کار با نوع داده TIME در SQL

دوره های مرتبط با این مقاله

نوع داده ای TIME

TIME یک نوع داده ای در SQL SERVER است. ستون هایی که نوع داده ای آن ها بر روی Time تنظیم شده است، مقادیر زمان را خود ذخیره می کنند. قالب نمایش یا فرمت رشته ای آن به صورت [hh:mm:ss[.nnnnnnn می باشد و محدوده یا بازه ی زمانی 00:00:00.0000000 تا 23:59:59.9999999 را می تواند دربرگیرد. hh اعداد 0 تا 23 را برای نمایش ساعت و mm دو رقم از 0 تا 59 را برای دقیقه و ss عددی دو رقمی از 0 تا 59 را برای نمایش ثانیه بکار می برد. n صفر تا هفت رقمی است که نشانگر کسر ثانیه می باشد و محدوده عددی 0 تا 9999999 ویژه ی آن درنظر گرفته شده است. دقت این نوع داده ای 100 نانو ثانیه است و مقدار حافظه ی لازم برای ذخیره ی مقدار آن معادل 5 بایت بوده و همیشه ثابت می باشد.
برای تنظیم فرمت نمایش زمان باید: Control Panel -> Regional and Language Options -> Customize Regional Options -> Time tab.


آموزش SQL

کار را با پایگاه داده ی University5 ادامه دهید.
پیش از شروع ترم، دانشگاه باید یک کاتالوگ منتشر کند. کاتالوگ لیستی از برنامه ها است را برای هر دوره ی آموزشی دربردارد. داشنجویان باید برای ثبت نام در دوره ی آموزشی به کاتالوگ مراجعه کند. کاتالوگ اطلاعات زیر را لیست می کند:
1. Semester: بخش اصلی برنامه است.
2. Course Code: شماره یا کد دوره ی آموزشی است که در ترم آموزش داده می شود.
3. Weekdays: روزهایی از هفته که دوره ی آموزشی در آن تدریس می شود. برخی از دوره های آموزشی هفته ای یکبار، برخی هفته ای دوبار (در دو روز Monday و Wednesday یا Tuesday و Thursday) آموزش داده می شوند. برخی از دروه ها آموزشی نیز سه با در هفته Monday، Wednesday و Friday آموزش داده می شوند.
4. Start Time: دوره های آموزشی در زمان های مختلف از روز یا عصر تدریس می شوند. تعدادی از دوره ها به صورت آنلاین آموزش داده می شوند که این دوره های آموزشی زمان شروع و start time مشخصی ندارند.
5. End Time: اگر دوره ی آموزشی دارای زمان شروع باشد طبیعتا یک زمان پایان معین نیز دارد. در صورتی که دوره ی آموزشی آنلاین باشد، end time نیز نخواهد داشت.
در این مبحث یک جدول در پایگاه داده ی مذکور ویژه ی زمان بندی ها و برنامه ی دوره های آموزشی دانشگاه ایجاد خواهیم کرد.


آموزش کاربردی

  1. محیط Microsoft SQL Server را راه اندازی نمایید و سپس در پنجره ی محاوره ی اتصال به سرور، دکمه ی Connect را کلیک نمایید.
  2. به Object Explorer مراجعه کرده و بر روی پایگاه داده ی University5 راست کلیک نمایید و سپس گزینه ی New Query را انتخاب کنید.

نوع داده ی Time

برای پشتیبانی از مقادیر زمان، T-SQL نوع داده ای TIME را ارائه می کند. می توانید یک متغیر تعریف کنید که نوع داده ای آن Timeباشد یا ستونی ایجاد کنید که این نوع داده ی برای آن تنظیم شده و مقادیر زمان را در خود نگه می دارد. برای مقداردهی اولیه یک متغیر از نوع Time، باید مقدارش را در قالب یک رشته به آن تخصیص دهید که از فرمول زیر پیروی می کند:


hh:mm
hh:mm:ss
hh:mm:ss[.fractional seconds]

در T-SQL، مقدار زمان به صورت رشته به متغیر تخصیص می یابد و داخل تک کوتیشن محصور می شود. برای تبدیل مقدار به کاراکتر یونیکد کافی است N را پیش از آن درج نمایید.
اولین بخش نمایشگر مقدار ساعت می باشد و از 1 تا 23 را دربر می گیرد. هر عدد دیگری خارج از این محدوده خطا می دهد. اگر مقدار کمتر از 10 باشد، می توانید در صورت تمایل یک صفر به قبل از آن اضافه کنید، مانند 08. بخش دوم مقدار دقیقه را نمایش می دهد و محدوده ی 1 تا 59 را شامل می شود. هر عدد دیگری خارج از این بازه خطا تولید می کند. اگر مقدار کمتر از 10 باشد، می توان یک صفر آغازین همراه مقدار نمایش داد مانند 04. مقادیر توسط : از یکدیگر تفکیک می شوند. مثال: 10:25.
در زیر مثالی از اعلان و مقداردهی اولیه ی یک متغیر از نوع داده ای TIME را مشاهده می کنید:


1> DECLARE @ArrivalTime time;
2> SET @ArrivalTime = N'18:22';
3> SELECT @ArrivalTime AS [Arrival Time];
4> GO
Arrival Time
----------------
18:22:00.0000000
(1 rows affected)
1>

سومین بخش همان طور که انتظار می رفت مربوط به نمایش مقدار ثانیه بوده و اختیاری می باشد. این بخش مقداری بین محدوده ی 1 تا 59 را دربرمی گیرد. این بخش از مقدار زمان توسط : از بخش قبلی جدا می شود. بنابراین می توان یک مقدار از نوع TIME را با استفاده از فرمول hh:mm:ss به صورت رشته مقداردهی اولیه کرد.


مثال:
DECLARE @TimeValue TIME;
SET @TimeValue = N'20:22:52';
SELECT @TimeValue;
GO

نتیجه ی زیر را برمی گرداند:
آموزش SQL

آخرین بخش از مقدار زمان مربوط به میلی ثانیه بوده و اختیاری می باشد. مقداری که در این برای نمایش وارد می شود باید بین محدوده ی 1 تا 999 باشد. این بخش از مقدار زمان توسط "." از بخش قبلی جدا می شود.
مقدار زمان در دو قالب نمایش داده می شود. فرمت اول مشخص می کند مقدار، زمان قبل یا بعد از ظهر را نمایش می دهد. در هر دو فرمت، بخش مربوط به ساعت باید بین محدوده ی 0 تا 11 باشد. اگر زمان مربوط به قبل از ظهر باشد، مقدار با AM خاتمه می یابد. مثال: 08:12 AM. اگر زمان مربوط به بعد از ظهر باشد، مقدار با PM خاتمه می یابد. مثال: 04:35 PM.
در فرمت دوم نمایش زمان، بخش ساعت مقداری بین محدوده ی 00 تا 23 را می پذیرد. همچنین AM و PM در آن لحاظ نمی شود. به عنوان مثال می توان به مقادیر 08:12 یا 15:18 اشاره کرد. اگر بخش ساعت مقداری بین 12 و 23 باشد، زمان مربوط به بعد از ظهر می باشد. برای نمایش اینکه آیا مقدار زمان مربوط به قبل از ظهر می باشد و بعد از آن، می توان PM و AM را همراه با مقدار مورد نظر به متغیر اختصاص داد:


DECLARE @TimeValue TIME;
SET @TimeValue = N'10:22:52 PM';
SELECT @TimeValue;
GO

نتیجه ی زیر حاصل می گردد:
آموزش SQL

در صورتی که AM/PM در مقدار به متغیر تخصیص داده نشود، مفسر پایگاه داده بخش مربوط به ساعت را بررسی کرده و محسابه می کند آیا زمان متعلق به قبل از ظهر می باشد یا بعد از آن. PM و AM می توانند با حروف کوچک یا حروف بزرگ باشند. به عبارتی دیگر AM و PM را می توان به تمامی صورت های زیر نمایش داد: AM, Am, aM, am, PM, Pm, Pm یا pm.


برای ایجاد یک ستون که مقادیری زمان را در خود ذخیره می کند، بایستی TIME را به عنوان نوع داده ای ستون مشخص نمایید:


آموزش SQL

برای مشخص کردن مقداری که در ستونی با نوع داده ای TIME ذخیره می شود، از همان فرمولی پیروی می کنیم که برای مقداردهی متغیر درنظر داشتیم:


hh:mm
hh:mm:ss
hh:mm:ss[.fractional seconds]

آموزش کاربردی: ایجاد مقادیر از نوع TIME

1. در پنجره ی Object Explorer، گره University5 را باز نمایید. بر روی گره Tables راست کلیک کرده و گزینه ی New Table را انتخاب نمایید.
2. در پنجره ی Properties، بر روی فیلد Schema کلیک کرده و سپس با کلیک بر روی هشتک لیست کشویی فیلد مزبور، Academics را به عنوان schema انتخاب نمایید.
3. ستون های جدول مورد نظر را به صورت زیر ایجاد نمایید:


Data Type
Column Name
nvarchar(10)
CourseCode
nvarchar(20)
Semester
time(7)
StartTime
time(7)
EndTime
nvarchar(20)
Weekdays

4. جدول را بسته و تغییرات اعمال شده را ذخیره کنید.
5. اسم جدول را UndergraduateSchedules را انتخاب کنید.
6. حال OK را کلیک کنید.
7. در پنجره ی Object Explorer، بر روی گره Tables متعلق به پایگاه داده ی University5 راست کلیک کرده و گزینه ی Refresh را انتخاب کنید.
8. بر روی Academics.UndergraduateSchedules راست کلیک کرده و گزینه ی Edit Top 200 Rows را انتخاب نمایید.
9. تعدادی رکورد به صورت زیر ایجاد کرده و مقادیر را به صورتی که در جدول زیر ارائه شده وارد آن نمایید (دقت کنید چگونه در جدول نمایش داده می شود):


Weekdays
EndTime
StartTime
Semester
Course Code
M-W
10:10
08:15
SPRING 2012
WRTG 101
M-W
12:20
10:25
SPRING 2012
WRTG 245
M-W
15:20
13:25
SUMMER 2012
CHEM 101
M-W
15:20
13:25
SUMMER 2012
WRTG 215
S
17:00
08:20
SUMMER 2012
CMIS 210

10. جدول را ببندید.
11. داخل Query Editor کلیک کرده و تعدادی رکورد تعریف نمایید. برای این منظور دستورات زیر را تایپ کنید:


USE University5;
GO
INSERT INTO Academics.UndergraduateSchedules(CourseCode, Semester, StartTime, EndTime,Weekdays)
VALUES(N'MATH 106', N'SPRING 2012', N'08:15', N'10:10', N'M-W');
GO
INSERT INTO Academics.UndergraduateSchedules(CourseCode, Semester, StartTime, EndTime,Weekdays)
VALUES(N'MATH 120', N'SPRING 2012', N'08:15 AM', N'10:10 AM', N'M-W');
GO
INSERT INTO Academics.UndergraduateSchedules(CourseCode, Semester, StartTime, EndTime,Weekdays)
VALUES(N'SOCY 100', N'SUMMER 2012', N'15:35', N'17:20', N'T-H');
GO
INSERT INTO Academics.UndergraduateSchedules(CourseCode, Semester, StartTime, EndTime,Weekdays)
VALUES(N'GVPS 140', N'SUMMER 2012', N'3:35 PM', N'5:20 PM', N'T-H');
GO

12. کلید F5 را زده تا دستورات اجرا گردد.


اجرای عملیات مختلف بر روی مقادیر از نوع داده ای Time

زمانی که رکوردها را بر اساس ستونی از نوع Time مرتب سازی می کنید، مفسر SQL باید مقدار هر فیلد از ستون را بررسی کند و آن هایی را که معتبر هستند پذیرفته و آن هایی که غیرمجاز و نامعتبر هستند را رد کند. در صورتی که رکوردها را بر اساس ستون با نوع داده ای TIME مرتب سازی می کنید و تعدادی از فیلدهای ستون دارای مقادیر NULL هستند، ابتدا رکوردهای با مقدار NULL فهرست می شوند. لازم به ذکر است که مقادیر بر اساس ترتیب رخدادشان مرتب سازی می شوند، برای مثال اگر جدول فقط مقادیر از نوع TIME در خود داشته باشد، در آن صورت موتور DB فرض می گیرد تمامی مقادیر زمانی مربوط به یک روز بوده و در یک روز اتفاق می افتند. در چنین شرایطی اگر رکوردها را بر مبنای ستونی که حاوی مقدار زمان است مرتب کنید، ابتدا مقادیر نزدیک به 0:01 AM نمایش داده می شود و سپس مقادیر نزدیک به 23:59 (midnight) در آخر لیست می شوند.


مرتب سازی رکوردهای حاوی مقدار زمان

1. تمامی دستورات موجود در Query Editor را انتخاب کرده و با دستور زیر جایگزین کنید:


USE University5;
GO
SELECT Semester,
       CourseCode,
       StartTime,
       EndTime,
       Weekdays
FROM Academics.UndergraduateSchedules
ORDER BY StartTime;
GO

2. حال مجموعه دستور جدید را با زدن F5 اجرا نمایید.


آموزش SQL

عملگرهای منطقی و اجرای عملیات مقایسه ای بر روی مقادیر از نوع TIME

  1. زمانی که عمل مقایسه بر روی مقادیر از نوع Time اجرا می شود، مقدار در هر دو طرف عملگر (مقادیر مورد مقایسه) باید در زمانی یکسان رخ دهند (هر دو مربط به زمانی یکسان باشند) و در حد یک ثانیه هم نباید با هم فرق داشته باشند. بنابراین نوع داده ای که برای ستون مشخص کرده اید و فرایند درج داده در آن اهمیت ویژه ای دارد. به عنوان مثال، اگر کاربر مقادیر ثانیه را در یک رکورد از نوع time قرار دهد و نه دیگری، عملیات سنجش برابری بین دو مقدار نتیجه ی پیشبینی نشده را ارائه می کند. نمونه: 14:22 و 14:22:01 دو مقدار متفاوت هستند.
  2. هنگامی که عملیات سنجش نابرابری بر روی مقادیر از نوع time انجام می شود، مقایسه غالبا مقدار true برمی گرداند (زیرا مقادیر زمان در اکثر موارد با هم برابر نیستند).
  3. زمانی که مقایسه برای بدست آوردن مقدار کوچکتر بر روی دو عمولند اجرا می شود، مقدار اول باید (طبیعتا از نظر ترتیب زمانی) پیش از مقدار دوم رخ دهد تا نتیجه ی عملیات صحیح شود.

آموزش کاربردی: فیلتر کردن فیلدهای از نوع time

1. مجموعه دستورات موجود در Query Editor را حذف نمایید.
2. برای مشاهده ی دوره های آموزشی که ساعت شروع کلاس های آن اوایل ظهر می باشد (واکشی رکوردهایی که مقدار فیلدهای از نوع time ستون Start Time آن برابر با 01:25 PM)، کد زیر را داخل Query Editor تایپ نمایید:


SELECT Semester,
       CourseCode,
       StartTime,
       EndTime,
       Weekdays
FROM Academics.UndergraduateSchedules
WHERE StartTime = N'01:25 PM';
GO

3. برای اجرای دستورات و مشاهده ی خروجی، کلید F5 را فشار دهید.


آموزش SQL

ایجاد مقدار از نوع time به وسیله ی تابع

همان طور که قبلا گفته شد، یک مقدار زمان از بخش های مختلفی نظیر ساعت، دقیقه و ثانیه تشکیل شده است. همچنین به خاطر دارید که مقدار زمان را در قالب یک رشته فراهم می کردیم. زبان T-SQL روش دیگری برای ایجاد مقداری از نوع time ارائه می کند: تابع TIMEFROMPARTS. طریقه ی استفاده از آن در زیر نمایش داده شده است:


 TIMEFROMPARTS(int hour, int minute, int seconds, int fractions, int precision) RETURNS time;

آرگومان اول (hour) باید مقداری در محدوده ی 0 تا 23 باشد. در جایگاه آرگومان دوم بایستی مقداری بین 0 تا 59 قرار گیرد. پارامتر سوم می بایست مقداری در محدوده ی 0 تا 59 باشد. اگر مقدار ثانیه برای شما اهمیتی ندارد، مقدار 0 را ارائه نمایید.


DECLARE @TimeValue time;
SET @TimeValue = TIMEFROMPARTS(8, 20, 42, 0, 0);
SELECT @TimeValue;
GO

نتیجه ی زیر را بدست می دهد:
آموزش SQL

دقت برای مقدار زمان نقش اساسی ایفا می کند. نقشی که دو آرگومان آخری ایفا می کنند، درواقع افزودن بر میزان دقت مقدار است. این دو آرگومان از آنجایی که به یکدیگر وابسته هستند، باید همراه با هم به تابع ارسال شوند:
1. اگر 0 یا 1 را به عنوان آرگومان precision به تابع پاس دهید، در آن صورت مقدار آرگومان fraction باید 0 باشد (که نشان دهنده ی 50/100 می باشد).
2. اگر مقدار 2 را به عنوان پارامتر precision به تابع ارسال کنید، در آن صورت مقدار آرگومان fraction باید بین محدوده ی 0 تا 99 باشد (که نشان دهنده ی 50/100 می باشد).


DECLARE @TimeValue time;
SET @TimeValue = TIMEFROMPARTS(8, 20, 42, 99, 2);
SELECT @TimeValue [Time Value];
GO

نتیجه ی زیر حاصل می گردد:
آموزش SQL

3. اگر مقدار 3 را به عنوان آرگومان precision ارسال کنید، در آن صورت باید مقداری بین 0 تا 99 را به عنوان پارامتر fraction به تابع ارسال نمایید ().


مثال:
DECLARE @TimeValue time;
SET @TimeValue = TIMEFROMPARTS(8, 20, 42, 999, 2);
SELECT @TimeValue [Time Value];
GO

نتیجه ی زیر را برمی گرداند:
آموزش SQL


4. اگر precision را مقدار 4 بدهید، fraction باید مقداری بین 0 تا 9999 باشد که پیکو ثانیه را در خروجی نشان می دهد.
5. اگر precision را مقدار 5 ارسال کنید، در آن صورت مقدار آرگومان fraction باید بین 0 تا 99999 باشد (که مقدار نانو ثانیه را در خروجی نشان می دهد).
6. اگر مقدار 6 را به عنوان آرگومان precision به تابع TIMEFROMPARTS ارسال کنید، مقدار آرگومان دیگر باید بین 0 تا 999999 باشد (که 10 نانو ثانیه را در خروجی نمایش می دهد).
7. اگر مقدار 7 را به عنوان آرگومان precision ارسال کنید، مقدار آرگومان fraction باید مقداری در محدوده ی 0 تا 9999999 باشد (که در خروجی 100 نانو ثانیه را نشان می دهد).


مثال:
DECLARE @TimeValue time;
SET @TimeValue = TIMEFROMPARTS(8, 20, 42, 9999999, 7);
SELECT @TimeValue [Time Value];
GO

آموزش SQL

نباید مقداری غیر از مقادیر ذکر شده در بالا را به عنوان پارامتر fraction به تابع پاس دهید، زیرا مفسر sql خطا می دهد.


آموزش کاربردی: ایجاد مقدار زمان

1. دستور موجود در پنجره ی Query Editor را به صورت زیر ویرایش نمایید:


INSERT INTO Academics.UndergraduateSchedules(Semester, CourseCode,
            StartTime, EndTime,Weekdays)
VALUES(N'FALL 2012', N'CMIS 210', TIMEFROMPARTS(8, 20, 0, 0, 0),
       TIMEFROMPARTS(17, 0, 0, 0, 0), N'M-T-W-H-F');;
GO
SELECT Semester,
       CourseCode,
       StartTime,
       EndTime,
       Weekdays
FROM Academics.UndergraduateSchedules;
GO

2. دستورات را اجرا کرده و خروجی آن را مشاهده نمایید:


آموزش SQL

بازیابی مقدار زمان فعلی رایانه

به کمک تابع GETDATE() می توان مقدار تاریخ و زمان جاری سیستم را بدست آورد.


GETDATE();

برای بدست آوردن زمان دقیق سیستم می توان SYSDATETIME() را صدا زد.


SYSDATETIME();

تبدیل رشته به زمان

همان طور که در مباحث پیشین ذکر شد، SQL دو تابع TRY_PARSE() وTRY_CONVERT() را ارائه می کند که امکان تبدیل مقدار از یک نوع به نوع دیگر را به ما می دهد. این دو تابع یک رشته به عنوان آرگومان می گیرد و آن را بررسی می کند. اگر آرگومان ارسالی یک مقدار زمان معتبر نباشد، تابع مقدار NULL را برمی گرداند.


مثال:
DECLARE @StrValue nvarchar(20),
        @TimeValue time;
SET @StrValue = N'1008';
SET @TimeValue = TRY_CONVERT(time, @StrValue);
SELECT @StrValue;
SELECT @TimeValue;
GO

نتیجه ی زیر را برمی گرداند:
آموزش SQL

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


DECLARE @StrValue nvarchar(20),
        @TimeValue time;
SET @StrValue = N'10:08';
SET @TimeValue = TRY_CONVERT(time, @StrValue);
SELECT @StrValue;
SELECT @TimeValue;
GO

خروجی:
آموزش SQL

فرمت دهی مقدار زمان (تابع FORMAT)

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


FORMAT(value, nvarchar format [, nvarchar culture ] ) RETURNS nvarchar

تابع یاد شده دو آرگومان (الزامی) می گیرد. آرگومان سوم اختیاری می باشد. اولین آرگومان یک متغیر حاوی مقدار از نوع TIME می باشد (مقداری که باید با فرمت مورد نظر نمایش داده شود یا به عبارتی فردهی شود) و آرگومان دوم فرمتی که مقدار باید به آن صورت نمایش داده شود را تعیین می کند. کامپیوتر خود دارای فرمت پیش فرض نمایش مقدار زمان می باشد. در زبان انگلیسی آمریکایی، این فرمت پیش فرض 00:00 تا 23:59 می باشد. به منظور ارائه و نمایش مقدار زمان با فرمت یا قالب پیش فرض، بایستی فرمت c را به عنوان مقدار آرگومان دوم به تابع ارسال کنید


مثال:
DECLARE @StrValue nvarchar(20),
        @TimeValue time;
SET @TimeValue = N'09:24 PM';
SET @StrValue = FORMAT(@TimeValue, N'c');
SELECT @StrValue;
SELECT @TimeValue;
GO

نتیجه ی اجرای کوئری را در تصویر زیر مشاهده می کنید:
آموزش SQL

افزودن به مقدار زمان (تابع DATEADD)

با استفاده از تابع DATEADD() می توان به مقدار زمان افزود (برای مثال متغیری حاوی مقدار زمان را به تابع ارسال کرد و به وسیله ی آرگومان دوم مقدار دلخواه را به آن اضافه کرد). نحوه ی نگارش آن به شرح زیر می باشد:


DATEADD(TypeOfValue, ValueToAdd, DateOrTimeReferenced)

آرگومان سوم مقدار زمان است که به تابع پاس داده شده و عملیات بر روی آن انجام می شود. این آرگومان می تواند یک مقدار ثابت با فرمتی مجاز باشد. آرگومان دوم مقداری است که به آرگومان سوم اضافه می شود. مقدار این پارامتر می بایست عدد صحیح ثابت مانند 8 یا مقدار ممیز شناور همچون 4.06 باشد.
به هنگام فراخوانی این تابع، ابتدا لازم است نوع مقداری که می خواهید به آن اضافه شود را مشخص نمایید. این نوع باید به عنوان آرگومان اول به تابع پاس داده شود.


در نتیجه: اگر نوع مقدار (مقدار زیر به عنوان آرگومان اول به تابع فرستاده شود) این باشد:
تعدادی ساعت به مقدار زمان افزوده می شود. hh Hour
تعدادی دقیقه به مقدار زمان اضافه می شود. mi n minute
تعدادی ثانیه به مقدار زمان اضافه می شود. ss s second
تعدادی میلی ثانیه به مقدار زمان اضافه می شود. ms millisecond

در زیر مثالی را می بینید که دو ساعت به مقدار زمان جاری اضافه می کند:


DECLARE @TimeValue time,
	@Result time;
SET     @TimeValue = N'23:38';
SET     @Result = DATEADD(hh, 2, @TimeValue);
SELECT @TimeValue;
SELECT @Result;
GO

نتیجه ی اجرای کوئری:
آموزش SQL

بدست آوردن اختلاف بین مقدار دو زمان (تابع DATEDIFF)

زبان T-SQL با ارائه ی تابع DATEDIFF() به توسعه دهنده امکان می دهد اختلاف بین دو مقدار زمانی را محاسبه کند. ساختار نگارشی این تابع به صورت زیر می باشد:


DATEDIFF(TypeOfValue, StartDate, EndDate)

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


مثال:
DECLARE @Start time,
	@End time,
	@Result int;
SET     @Start = N'12:24';
SET     @End = N'15:06';
SET     @Result = DATEDIFF(n, @Start, @End);
SELECT @Start [Start Time];
SELECT @End [End Time];
SELECT @Result;
GO	

نتیجه :
آموزش SQL

بازیابی بخشی از مقدار زمان (تابع DATENAME)

گاهی نیاز داریم تنها بخشی از کل مقدار زمان را واکشی کنیم، برای مثال فقط ساعت، دقیقه یا ثانیه را استخراج کنیم. برای این منظور T-SQL تابع DATENAME را ارائه می کند. نحوه ی استفاده از آن در زیر ذکر شده است:


DATENAME(integer ReturnedValue, date Value) RETURNS nvarchar;A

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


تابع مقدار زیر را برمی گرداند: اگر اولین آرگومان ارسالی به تابع این باشد:
قسمت ساعت hh Hour
قسمت دقیقه mi n minute
ثانیه ss s second
میلی ثانیه ms millisecond
میکروثانیه mcs microsecond
نانوثانیه ns nanosecond

دومین آرگومان یک متغیر حاوی مقدار زمان است که آرگومان اول از آن استخراج می شود.


مثال:
DECLARE @TimeValue time,
	@Result int;
SET     @TimeValue = N'23:38';
SET     @Result = DATENAME(hh, @TimeValue);
SELECT @TimeValue;
SELECT @Result;
GO

آموزش SQL

علاوه بر تابع DATENAME()، زبان T-SQL تابع دیگری به نام DATEPART را ارائه می دهد. نحوه ی نگارش آن به شرح زیر می باشد:


int DATEPART (integer datepart, date Value)

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


استفاده از مقدار تاریخ و زمان به طور همزمان

بجای نمایش مقدار تاریخ و زمان به صورت مجزا، می توان هر دو را همزمان نمایش داد. برای این منظور دو گزینه پیشرو دارید. می توانید دو متغیر یا ستون جدا برای ذخیره و نمایش دو مقدار بکار ببرید و یا دو مقدار را در قالب و واحد یکسان ترکیب نمایید.
با نحوه ی اعلان متغیر از نوع date، ایجاد یک ستون با نوع داده ای date، چگونگی تعریف یک متغیر از نوع time و نیز ستون از نوع داده ای time آشنا هستید. بنابراین می توانید یک جدول که حاوی ترکیبی از ستون هایی با فیلدهای از نوع time و date است ایجاد کنید. پس از ایجاد ستون، می توان رکوردها را بر اساس نیاز به جدول مذکور اضافه نمایید.
اگر رکوردهای یک جدول که حاوی ترکیبی از ستون های از نوع date و time می باشد را مرتب نمایید با سناریوهای زیر مواجه می شوید:
1. چنانچه رکوردهای جدول را فقط بر اساس ستون های حاوی مقدار date مرتب سازی نمایید، در آن صورت تمامی سطرها بر اساس تاریخ و صرف نظر از ترتیب زمانی ستون های دارای مقدار time، مرتب سازی و سازمان دهی می شوند.
2. در صورتی که رکوردهای جدول را فقط بر اساس ستون های حاوی مقدار time مرتب نمایید، در آن صورت سطرها به ترتیب زمانی و صرف نظر از مقدار ستون های date مرتب می شوند.
3. حال اگر سطرهای جدول را اول بر اساس ستون های حاوی مقدار date و سپس بر اساس ستون های با مقدار time مرتب نمایید، در آن صورت ابتدا رکوردها بر اساس تاریخ مرتب می شوند و سپس اگر تاریخ ها یکسان باشند، فیلدهای حاوی مقدار تاریخ گروه بندی شده و سپس هر گروه بر اساس زمان مرتب می شوند.
4. اگر رکوردها را اول بر اساس time و سپس بر اساس date مرتب نمایید، سطرها اول بر اساس زمان مرتب می شوند. سپس اگر مقدار time آن ها یکسان باشد، فیلدهای حاوی مقدار زمان گروه بندی شده و سپس هر گروه بر اساس تاریخ مرتب می شود.


آموزش کاربردی

1. در Object Explorer، بر روی Academics.UndergraduateSchedules راست کلیک کرده و گزینه ی Delete را انتخاب نمایید.
2. حال تمامی دستورات موجود در پنجره ی Query Editor را انتخاب نموده و آن ها را حذف نمایید.
3. به منظور ایجاد یک جدول جدید، کد زیر را وارد نمایید:


CREATE TABLE Academics.UndergraduateSchedules
(
    Semester 	  nvarchar(20),
    StartDate  	  date,
    EndDate       date,
    StartTime  	  time,
    EndTime 	  time,
    Weekdays 	  nvarchar(32),
    CourseCode 	  nvarchar(10)
);
GO
INSERT INTO Academics.UndergraduateSchedules(Semester, StartDate, EndDate, StartTime, EndTime, Weekdays, CourseCode) VALUES(N'SPRING 2012', N'20120109', N'20120318', N'08:15', N'10:10', N'M-W', N'WRTG 101');
INSERT INTO Academics.UndergraduateSchedules(Semester, StartDate, EndDate, StartTime, EndTime, Weekdays, CourseCode) VALUES(N'SPRING 2012', N'20120109', N'20120318', N'10:25', N'12:20', N'M-W', N'WRTG 101');
INSERT INTO Academics.UndergraduateSchedules(Semester, StartDate, EndDate, StartTime, EndTime, Weekdays, CourseCode) VALUES(N'SPRING 2012', N'20120109', N'20120318', N'15:35', N'17:30', N'M-W', N'WRTG 101');
INSERT INTO Academics.UndergraduateSchedules(Semester, StartDate, EndDate, StartTime, EndTime, Weekdays, CourseCode) VALUES(N'SPRING 2012', N'20120109', N'20120226', N'10:25', N'12:20', N'M-W-F', N'WRTG 101');
INSERT INTO Academics.UndergraduateSchedules(Semester, StartDate, EndDate, StartTime, EndTime, Weekdays, CourseCode) VALUES(N'SPRING 2012', N'20120109', N'20120226', N'08:15', N'10:10', N'M-W-F', N'WRTG 101');
INSERT INTO Academics.UndergraduateSchedules(Semester, StartDate, EndDate, StartTime, EndTime, Weekdays, CourseCode) VALUES(N'SPRING 2012', N'20120109', N'20120226', N'10:25', N'12:20', N'M-W-F', N'WRTG 101');
INSERT INTO Academics.UndergraduateSchedules(Semester, StartDate, EndDate, StartTime, EndTime, Weekdays, CourseCode) VALUES(N'SPRING 2012', N'20120109', N'20120318', N'10:25', N'12:20', N'M-W', N'MATH 106');
INSERT INTO Academics.UndergraduateSchedules(Semester, StartDate, EndDate, StartTime, EndTime, Weekdays, CourseCode) VALUES(N'SPRING 2012', N'20120109', N'20120318', N'08:15', N'10:10', N'T-H', N'MATH 106');
INSERT INTO Academics.UndergraduateSchedules(Semester, StartDate, EndDate, StartTime, EndTime, Weekdays, CourseCode) VALUES(N'SPRING 2012', N'20120109', N'20120318', N'13:25', N'15:30', N'T-H', N'EDPD 100');
INSERT INTO Academics.UndergraduateSchedules(Semester, StartDate, EndDate, StartTime, EndTime, Weekdays, CourseCode) VALUES(N'SPRING 2012', N'20120109', N'20120318', N'15:35', N'17:30', N'T-H', N'EDPD 100');
INSERT INTO Academics.UndergraduateSchedules(Semester, StartDate, EndDate, StartTime, EndTime, Weekdays, CourseCode) VALUES(N'SPRING 2012', N'20120109', N'20120318', N'13:25', N'15:30', N'M-W', N'EDPD 100');
INSERT INTO Academics.UndergraduateSchedules(Semester, StartDate, EndDate, StartTime, EndTime, Weekdays, CourseCode) VALUES(N'SPRING 2012', N'20120109', N'20120318', N'15:35', N'17:30', N'M-W', N'EDPD 100');
INSERT INTO Academics.UndergraduateSchedules(Semester, StartDate, EndDate, StartTime, EndTime, Weekdays, CourseCode) VALUES(N'SUMMER 2012', N'20120514', N'20120819', N'08:15', N'10:10', N'M-W', N'WRTG 101');
INSERT INTO Academics.UndergraduateSchedules(Semester, StartDate, EndDate, StartTime, EndTime, Weekdays, CourseCode) VALUES(N'SUMMER 2012', N'20120514', N'20120819', N'10:25', N'12:20', N'M-W', N'EDPD 100');
INSERT INTO Academics.UndergraduateSchedules(Semester, StartDate, EndDate, StartTime, EndTime, Weekdays, CourseCode) VALUES(N'SUMMER 2012', N'20120514', N'20120819', N'08:15', N'10:10', N'T-H', N'MATH 106');
INSERT INTO Academics.UndergraduateSchedules(Semester, StartDate, EndDate, StartTime, EndTime, Weekdays, CourseCode) VALUES(N'SUMMER 2012', N'20120514', N'20120819', N'13:25', N'15:20', N'M-W', N'MATH 115');
INSERT INTO Academics.UndergraduateSchedules(Semester, StartDate, EndDate, StartTime, EndTime, Weekdays, CourseCode) VALUES(N'SUMMER 2012', N'20120514', N'20120819', N'08:15', N'10:10', N'T-H', N'HIST 140');
INSERT INTO Academics.UndergraduateSchedules(Semester, StartDate, EndDate, StartTime, EndTime, Weekdays, CourseCode) VALUES(N'SUMMER 2012', N'20120514', N'20120819', N'10:25', N'12:20', N'T-H', N'HIST 140');
INSERT INTO Academics.UndergraduateSchedules(Semester, StartDate, EndDate, StartTime, EndTime, Weekdays, CourseCode) VALUES(N'SUMMER 2012', N'20120514', N'20120708', N'08:15', N'10:10', N'M-W', N'SOCY 100');
INSERT INTO Academics.UndergraduateSchedules(Semester, StartDate, EndDate, StartTime, EndTime, Weekdays, CourseCode) VALUES(N'SUMMER 2012', N'20120514', N'20120708', N'10:25', N'12:20', N'M-W', N'SOCY 100');
INSERT INTO Academics.UndergraduateSchedules(Semester, StartDate, EndDate, StartTime, EndTime, Weekdays, CourseCode) VALUES(N'SUMMER 2012', N'20120514', N'20120708', N'08:15', N'10:10', N'T-H', N'SOCY 100');
INSERT INTO Academics.UndergraduateSchedules(Semester, StartDate, EndDate, StartTime, EndTime, Weekdays, CourseCode) VALUES(N'SUMMER 2012', N'20120514', N'20120708', N'10:25', N'12:20', N'T-H', N'SOCY 100');
INSERT INTO Academics.UndergraduateSchedules(Semester, StartDate, EndDate, StartTime, EndTime, Weekdays, CourseCode) VALUES(N'SUMMER 2012', N'20120514', N'20120819', N'15:35', N'17:30', N'T-H', N'HIST 215');
INSERT INTO Academics.UndergraduateSchedules(Semester, StartDate, EndDate, StartTime, EndTime, Weekdays, CourseCode) VALUES(N'SUMMER 2012', N'20120514', N'20120819', N'13:25', N'15:20', N'T-H', N'HIST 215');
INSERT INTO Academics.UndergraduateSchedules(Semester, StartDate, EndDate, StartTime, EndTime, Weekdays, CourseCode) VALUES(N'SUMMER 2012', N'20120514', N'20120819', N'08:15', N'10:10', N'T-H', N'FINA 101');
INSERT INTO Academics.UndergraduateSchedules(Semester, StartDate, EndDate, StartTime, EndTime, Weekdays, CourseCode) VALUES(N'SUMMER 2012', N'20120514', N'20120819', N'10:25', N'12:20', N'M-W-F', N'GVPS 140');
INSERT INTO Academics.UndergraduateSchedules(Semester, StartDate, EndDate, StartTime, EndTime, Weekdays, CourseCode) VALUES(N'SUMMER 2012', N'20120514', N'20120819', N'10:25', N'12:20', N'T-H', N'HIST 216');
INSERT INTO Academics.UndergraduateSchedules(Semester, StartDate, EndDate, StartTime, EndTime, Weekdays, CourseCode) VALUES(N'SUMMER 2012', N'20120514', N'20120819', N'08:15', N'10:10', N'M-W', N'ACCT 311');
GO

4. کد بالا را اجرا نمایید.
5. مجموعه دستورات داخل پنجره ی Query Editor را با گرفتن کلیدهای Ctrl + A انتخاب نمایید.
6. برای مرتب سازی رکوردها بر اساس ستون از نوع date، کد زیر را وارد نمایید:


SELECT Semester,
       StartDate "Start Date", 
       EndDate "End Date", 
       StartTime "Start Time", 
       EndTime "End Time", 
       Weekdays, 
       CourseCode "Course Code"
FROM Academics.UndergraduateSchedules
ORDER BY StartDate;
GO

7. برای اجرای دستورات کلید F5 را بزنید.
8. به منظور مرتب سازی رکوردها بر اساس ستون از نوع date، دستور را به صورت زیر ویرایش نمایید:


SELECT Semester,
       StartDate "Start Date", 
       EndDate "End Date", 
       StartTime "Start Time", 
       EndTime "End Time", 
       Weekdays, 
       CourseCode "Course Code"
FROM Academics.UndergraduateSchedules
ORDER BY StartTime;
GO

9. با فشردن کلید F5 دستورات را اجرا نمایید.
10. جهت مرتب سازی رکوردها بر اساس ستون از نوع time، دستور را به صورت زیر ویرایش نمایید:


SELECT Semester,
       StartDate "Start Date", 
       EndDate "End Date", 
       StartTime "Start Time", 
       EndTime "End Time", 
       Weekdays, 
       CourseCode "Course Code"
FROM Academics.UndergraduateSchedules
ORDER BY StartDate, StartTime;
GO

11. دستور بالا را اجرا نمایید.
12. برای مرتب کردن رکوردهای جدول بر مبنای ستون از نوع time و سپس ستون از نوع date، دستورات را به صورت زیر ویرایش کنید:


SELECT Semester,
       StartTime "Start Time",
       EndTime "End Time", 
       StartDate "Start Date",
       EndDate "End Date", 
       Weekdays, 
       CourseCode "Course Code"
FROM Academics.UndergraduateSchedules
ORDER BY StartDate, StartTime;
GO

13. برای اجرای دستورات فوق، کلید F5 را بزنید.


قرار دادن مقادیر تاریخ و زمان در یک واحد (فیلد)

تاکنون مقادیر زمان و تاریخ را در متغیرها و ستون های مجزا ذخیره کرده و نمایش می دادیم. T-SQL این امکان را به شما می دهد مقادیر تاریخ و زمان را ترکیب کرده و در یک واحد قرار دهید. برای پشتیبانی از این قابلیت، T-SQL نوع داده ای DATETIME2 را ارائه می دهد. این نوع داده ای از تاریخ یک ژانویه ی0001 تا 31 دسامبر سال 9999 را دربرمی گیرد (ذخیره می کند). برجسته ترین ویژگی نوع داده ای مرکب بودن آن است (ترکیبی از نوع داده ای date و time)، بنابراین تمامی خصیصه های دو نوع داده ای time و date در آن حضور دارند.
برای تعریف متغیری که اطلاعات مربوط به هر دو نوع داده ای را در خود ذخیره کند، بایستی آن را با کلیدواژه ی DATETIME2 اعلان نمایید. به همین نحوه می توانید یک ستون در جدول ایجاد کرده و این نوع داده ای را به آن اعمال نمایید. به منظور مقداردهی اولیه متغیر با نوع داده ای time/date یا تخصیص مقدار به ستونی از این دو نوع، می توانید تمامی فرمت های نمایش تاریخ و زمان که پیش تر تشریح شد یا ترکیبی از آن ها را بکار ببرید. این فرمت های در زیر فهرست شده اند:


YYYYMMDD
YYYYMMDD hh:mm:ss
YYYYMMDD hh:mm:ss[.fractional seconds]
YYYY-MM-DD
YYYY-MM-DD hh:mm:ss
YYYY-MM-DD hh:mm:ss[.fractional seconds]
MM-DD-YY
MM-DD-YY hh:mm:ss
MM-DD-YY hh:mm:ss[.fractional seconds]
MM-DD-YYYY
MM-DD-YYYY hh:mm:ss
MM-DD-YYYY hh:mm:ss[.fractional seconds]
MM/DD/YY
MM/DD/YY hh:mm:ss
MM/DD/YY hh:mm:ss[.fractional seconds]
MM/DD/YYYY
MM/DD/YYYY hh:mm:ss
MM/DD/YYYY hh:mm:ss[.fractional seconds]

به یاد داشته باشید که مقدار مورد نظر را حتما داخل تک کوتیشن قرار دهید. همان طور که قبلا گفته شد، می توانید مقادیر را با هم ترکیب نمایید.


مثال:
DECLARE @FullName nvarchar(60),
     	@DateOfBirth date,
	@DateRegistered datetime2
SET @FullName       = N'John Summons';
SET @DateOfBirth    = N'19960426';
SET @DateRegistered = N'20090629';
SELECT @FullName AS [Full Name],
       @DateOfBirth AS [Date of Birth],
       @DateRegistered AS [Date Registered];
SET @FullName       = N'James Haans';
SET @DateOfBirth    = N'1994-10-25';
SET @DateRegistered = N'2009-08-02';
SELECT @FullName AS [Full Name],
       @DateOfBirth AS [Date of Birth],
       @DateRegistered AS [Date Registered];
SET @FullName       = N'Gertrude Monay';
SET @DateOfBirth    = N'06-16-92';
SET @DateRegistered = N'2009-12-24 12:36';
SELECT @FullName AS [Full Name],
       @DateOfBirth AS [Date of Birth],
       @DateRegistered AS [Date Registered];
SET @FullName       = N'Philomène Guillon';
SET @DateOfBirth    = N'1996-10-16';
SET @DateRegistered = N'10/14/08 09:42:05.136';
SELECT @FullName AS [Full Name],
       @DateOfBirth AS [Date of Birth],
       @DateRegistered AS [Date Registered];
SET @FullName       = N'Eddie Monsoon';
SET @DateOfBirth    = N'08/10/96';
SET @DateRegistered = N'2009-06-02 12:36';
SELECT @FullName AS [Full Name],
       @DateOfBirth AS [Date of Birth],
       @DateRegistered AS [Date Registered];
SET @FullName       = N'Peter Mukoko';
SET @DateOfBirth    = N'03-10-1994';
SET @DateRegistered = N'7/22/2009 10:24:46.248';
SELECT @FullName AS [Full Name],
       @DateOfBirth AS [Date of Birth],
       @DateRegistered AS [Date Registered];
SET @FullName       = N'Chritian Allen';
SET @DateOfBirth    = N'06/16/1995';
SET @DateRegistered = N'02-09-2009 12:36';
SELECT @FullName AS [Full Name],
       @DateOfBirth AS [Date of Birth],
       @DateRegistered AS [Date Registered];
GO

T-SQL علاوه بر DATE، TIME و DATETIME2 از انواع داده ای smalldatetime و datetime پشتیبانی می کند. دو نوع داده ای ذکر شده اگرچه هنوز در دسترس می باشند، اما تا حدی قدیمی محسوب شده و تا جایی که امکان دارد باید از بکار بردن آن خودداری نمود (در واقع می توان گفت تنها علت نگه داشتن آن، سازگاری با نسخه های پیشین می باشد).


ایجاد مقدار مرکب (زمان/تاریخ) به وسیله ی تابع

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


DATETIME2FROMPARTS(int year, 
                                  int month, 
                                  int day, 
                                  int hour, 
                                  int minute, 
                                  int seconds, 
                                  int fractions, 
                                  int precision) RETURNS datetime2;

همان طور که می بینید، این تابع 8 آرگومان (الزامی) می گیرد. یادآور می شویم که نوع داده ای datetime2 ترکیبی از تاریخ و زمان می باشد. بر این اساس، سه آرگومان اول همان پارامترهایی هستند که در تابع DATEFROMPARTS() بکار می روند. باقی آرگومان های با آرگومان های تابع TIMEFROMPARTS() یکسان هستند.


مرتب سازی رکوردها بر اساس ستون های حاوی مقدار زمان و تاریخ

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


مثال:
USE master;
GO
CREATE DATABASE IceCreamFactory1;
GO
USE IceCreamFactory1;
GO
CREATE SCHEMA IceCream;
GO
CREATE TABLE IceCream.Orders
(
	OrderID int identity(1, 1) not null,
	OrderedPeriod DateTime2 null
);
GO
INSERT IceCream.Orders(OrderedPeriod)
VALUES(N'2012-02-14 10:12'), (N'2012-02-15 09:08'),
      (N'2012-05-10 15:24'), (N'2012-07-04 14:01'),
      (N'2012-04-18 19:16'), (N'2012-04-18 09:15'),
      (N'2012-04-18 12:48'), (N'2012-07-04 11:26');
GO
SELECT OrderID, OrderedPeriod FROM IceCream.Orders
ORDER BY OrderedPeriod;
GO

نتیجه ی زیر را برمی گرداند:
آموزش SQL

انجام عملیات مقایسه منطقی بر روی فیلدهای از نوع date/time

می توان انواع عملیات مقایسه منطقی را بر روی متغیرها و ستون هایی که نوع داده ای آن ها datetime2 می باشد، اجرا کرد. مقدار مورد نظر ممکن است تنها حاوی زمان، تاریخ یا هر دوی آن ها باشد. اگر مقدار تنها حاوی تاریخ باشد، مقایسه همان اصولی را که در خصوص نوع داده ای date ارائه شد را دنبال می کند. اگر مقدار فقط دربردارنده ی زمان باشد، مقایسه از قوانین مربوط به نوع داده ای time پیروی می کند. در صورتی که مقدار ترکیبی از تاریخ و زمان باشد:
1. اگر مقادیر را برای سنجش برابری "=" مقایسه نمایید، در آن صورت هر دو باید در روز و زمان یکسان رخ دهند تا نتیجه true شود.


مثال:
USE master;
GO
DECLARE @FirstOrder datetime2,
	    @SecondOrder datetime2;
SET @FirstOrder =  N'2012-02-14 10:12:00';
SET @SecondOrder = N'2012-02-14 10:12:00';
IF @FirstOrder = @SecondOrder
	PRINT N'Both orders were made at the same time.';
ELSE
	PRINT N'The orders were made at different times.';
GO

خروجی:
آموزش SQL

در صورت تشخیص کوچکترین اختلافی در مقدار دو عملوند (حتی در حد میلی ثانیه)، مفسر SQL مقدار FALSE را بر می گرداند.


آموزش SQL

2. در صورتی که عملیات مقایسه را (با بهره گیری از دو عملگر <>) بر روی دو مقدار نابرابر اجرا کنید، هر گونه اختلاف بین مقدار دو عملوند، true برمی گرداند.
3. برای اینکه بفهمیم یک زمان مشخص قبل از دیگری رخ داده است یا خیر، بایستی دو عملوند را با استفاده از عملگر > مورد مقایسه قرار دهیم. اگر مقدار اول مربوط به زمانی قبل از مقدار زمان دوم باشد، مقایسه true را برمی گرداند. اگر بخش های تاریخ برابر باشند، در آن صورت بخش مربوط به زمان مقدار اول باید قبل از مقدار زمان عملوند دوم رخ دهد.


مثال:
USE master;
GO
DECLARE @FirstOrder datetime2,
	    @SecondOrder datetime2;
SET @FirstOrder =  N'2012-02-14 10:12:00';
SET @SecondOrder = N'2012-02-14 10:12:01';
IF @FirstOrder < @SecondOrder
	PRINT N'The first order was placed before the second.';
ELSE
	PRINT N'Either both orders were made at the same time or the first was after the second.';
GO

4. برای تشخیص اینکه آیا دو مقدار در زمان یکسان رخ داده اند و یا اولی پیش از دومی رخ داده است، عملگر "<=" را بکار می بریم. همچنین می توان عملگر !> را برای انجام عملیات مقایسه و دریافت نتیجه ی یکسان مورد استفاده قرار داد.
5. برای تشخیص اینکه آیا مقدار یک زمان پس از مقدار دیگری رخ داده است یا خیر، کافی است دو مقدار را به واسطه ی عملگر > مقایسه کرد. در این مقایسه، اگر مقدار اول از نظر ترتیب زمانی از مقدار عملوند دوم بزرگتر باشد، مقایسه مقدار true را برمی گرداند.
6. برای اینکه بفهمیم آیا دو مقدار در زمان یکسان رخ داده اند یا مقدار زمان عملوند اول پس از دومی رخ داده است، عملگر >= را بکار می بریم. برای انجام همین عملیات و دریافت خروجی یکسان می توان بجای عملگر ذکر شده، !< را بکار برد.

  • 4999
  •    1082
  • تاریخ ارسال :   1394/12/09

دانلود PDF دانشجویان گرامی اگر این مطلب برای شما مفید بود لطفا ما را در GooglePlus محبوب کنید
رمز عبور: tahlildadeh.com یا www.tahlildadeh.com
ارسال دیدگاه نظرات کاربران
شماره موبایل دیدگاه
عنوان پست الکترونیک

ارسال

آموزشگاه برنامه نویسی تحلیل داده
آموزشگاه برنامه نویسی تحلیل داده

تمامی حقوق این سایت متعلق به آموزشگاه تحلیل داده می باشد .