مثالهای عملی
مثال 1: خواندن مستقیم زمان جاری
سادهترین کاربرد GETDATE مشاهده زمان مرجع هنگام اجرای دستور است.
SELECT GETDATE() AS CurrentValue;
| خروجی | نتیجه نمونه یا انتظار |
|---|
| نتیجه مثال 1 | یک مقدار جاری وابسته به لحظه اجرا |
نکته کاربردی: خروجی از ساعت سیستم SQL Server خوانده میشود و نوع آن datetime است.
مثال 2: جدا کردن بخش تاریخ
در گزارش روزانه میتوان بخش تاریخ را از زمان جاری جدا کرد.
SELECT CONVERT(date, GETDATE()) AS TodayDate;
| خروجی | نتیجه نمونه یا انتظار |
|---|
| نتیجه مثال 2 | 2026-07-19 در روز تولید مقاله |
نکته کاربردی: برای اجرای واقعی مقدار روز جاری سرور نمایش داده میشود.
مثال 3: ثبت زمان در جدول موقت
این سناریو روش ثبت زمان ایجاد یک رخداد را بدون ساخت جدول دائمی نشان میدهد.
DECLARE @Audit TABLE (Id int, CreatedAt datetime);
INSERT INTO @Audit VALUES (1, GETDATE());
SELECT * FROM @Audit;
| خروجی | نتیجه نمونه یا انتظار |
|---|
| نتیجه مثال 3 | یک ردیف با Id برابر 1 و زمان درج |
نکته کاربردی: نوع ستون را با نوع خروجی تابع هماهنگ کنید تا دقت یا Offset حذف نشود.
مثال 4: استفاده در شرط رویدادهای گذشته
مرز زمانی یکبار در متغیر ذخیره میشود و سپس در WHERE به کار میرود.
DECLARE @Now datetime = GETDATE();
DECLARE @Events TABLE (EventId int, EventDate datetime);
INSERT INTO @Events VALUES (1, DATEADD(day,-1,@Now)),(2,DATEADD(day,1,@Now));
SELECT EventId FROM @Events WHERE EventDate < @Now;
| خروجی | نتیجه نمونه یا انتظار |
|---|
| نتیجه مثال 4 | EventId = 1 |
نکته کاربردی: ذخیره مقدار در متغیر از تفاوت جزئی میان چند فراخوانی جلوگیری میکند.
مثال 5: ترکیب با DATEADD
برای محاسبه زمان انقضا، یک بازه مشخص به ساعت جاری افزوده میشود.
SELECT DATEADD(minute, 90, GETDATE()) AS ExpiresAt;
| خروجی | نتیجه نمونه یا انتظار |
|---|
| نتیجه مثال 5 | زمان اجرا به علاوه 90 دقیقه |
نکته کاربردی: این الگو برای توکن، رزرو و قفل موقت قابل استفاده است.
مثال 6: بررسی رفتار NULL
خود تابع جاری NULL برنمیگرداند؛ CASE این ویژگی را به شکل اجرایی نشان میدهد.
SELECT CASE WHEN GETDATE() IS NULL THEN 0 ELSE 1 END AS NullCheck;
| خروجی | نتیجه نمونه یا انتظار |
|---|
| نتیجه مثال 6 | مقدار معتبر یا 1 |
نکته کاربردی: اگر عبارت بزرگتر NULL شد، منشأ NULL معمولاً تبدیل یا داده جانبی است نه تابع ساعت.
مثال 7: محاسبه مرز آینده
یک مرز زمانی آینده برای زمانبندی کارها محاسبه میشود.
SELECT DATEDIFF(second, GETDATE(), DATEADD(minute, 1, GETDATE())) AS FutureBoundary;
| خروجی | نتیجه نمونه یا انتظار |
|---|
| نتیجه مثال 7 | مقدار زمانی آینده |
نکته کاربردی: واحد بازه باید با نیاز کسبوکار و نوع ستون سازگار باشد.
مثال 8: ساخت کلید گزارش روزانه
خروجی تابع به تاریخ یا بخش دوره تبدیل میشود تا گزارش روزانه شکل بگیرد.
SELECT CAST(GETDATE() AS date) AS ReportBucket;
| خروجی | نتیجه نمونه یا انتظار |
|---|
| نتیجه مثال 8 | یک تاریخ یا مرز زمانی گزارش |
نکته کاربردی: برای گروهبندی جداول بزرگ بهتر است کلید دوره از قبل ذخیره یا ایندکس شود.
مثال 9: تشخیص روش نادرست و صحیح
این مثال خطای نحوی یا افت دقت رایج را کنار نسخه اصلاحشده نشان میدهد.
BEGIN TRY
EXEC sys.sp_executesql N'SELECT GETDATE AS WrongValue;';
END TRY
BEGIN CATCH
SELECT ERROR_MESSAGE() AS ErrorMessage;
END CATCH;
SELECT GETDATE() AS CorrectValue;
| خروجی | نتیجه نمونه یا انتظار |
|---|
| نتیجه مثال 9 | پیام خطا یا دو خروجی قابل مقایسه |
نکته کاربردی: تقریباً ۳٫۳۳ میلیثانیه دقت ذخیرهسازی datetime دارد.
مثال 10: فیلتر کارا با مرز ثابت
در جستوجوی رخدادهای اخیر، مرز زمانی یکبار محاسبه میشود تا ستون ایندکسشده دستنخورده بماند.
DECLARE @Cutoff datetime = DATEADD(day, -30, GETDATE());
DECLARE @Log TABLE (LogId int, LoggedAt datetime, INDEX IX_Log NONCLUSTERED (LoggedAt));
INSERT INTO @Log VALUES (1,DATEADD(day,-40,@Cutoff)),(2,DATEADD(day,5,@Cutoff));
SELECT LogId, LoggedAt FROM @Log WHERE LoggedAt >= @Cutoff;
| خروجی | نتیجه نمونه یا انتظار |
|---|
| نتیجه مثال 10 | ردیف دوم در محدوده قرار میگیرد |
نکته کاربردی: در شرطهای پرتکرار، GETDATE را ابتدا در متغیر قرار دهید تا برآورد کاردینالیتی قابل پیشبینیتر شود.
سؤالات متداول
تابع GETDATE دقیقاً چه کاری انجام میدهد؟
تاریخ و ساعت محلی سیستمعاملی را که SQL Server روی آن اجرا میشود برمیگرداند. مهم است که ورودیها با نوع داده صریح ارسال شوند و خروجی datetime در طراحی ستون مقصد لحاظ شود.
برای شروع کار با GETDATE چه چیزی باید بدانیم؟
ابتدا نحو GETDATE() را یاد بگیرید، سپس با مقدار ISO ثابت آزمایش کنید. بعد از اطمینان از نوع خروجی، آن را وارد Query واقعی کنید.
GETDATE در پروژههای تجاری چه کاربردی دارد؟
این تابع در گزارشگیری، کنترل مهلت، ثبت رخداد و پاکسازی دادههای زمانی کاربرد دارد. در پروژه سازمانی باید منطقه زمانی، دقت و حجم داده نیز در طراحی بررسی شود.
آیا استفاده از GETDATE هزینه توسعه را کاهش میدهد؟
استفاده درست از قابلیت داخلی SQL Server معمولاً کد برنامه را ساده و رفتار را یکپارچه میکند. برای Queryهای حساس، بازبینی تخصصی طرح اجرا و ایندکس همچنان ارزشمند است.
تفاوت GETDATE با روشهای تبدیل دستی چیست؟
تابع داخلی قواعد نوع داده و خطا را شفافتر اعمال میکند، در حالی که اتصال رشته یا تبدیل دستی ممکن است به LANGUAGE و DATEFORMAT وابسته شود. انتخاب نهایی به دقت و نسخه SQL Server بستگی دارد.
برای پیادهسازی حرفهای GETDATE میتوان از خدمات مشاوره استفاده کرد؟
بله؛ در مهاجرت داده، طراحی گزارش و بهینهسازی Query، بررسی نمونه داده و Execution Plan توسط متخصص SQL Server میتواند از خطاهای زمانی پرهزینه جلوگیری کند.
خطای رایج هنگام استفاده از GETDATE چیست؟
ورودی مبهم، نوع مقصد نامتناسب یا عبور از دامنه معتبر از خطاهای رایج است. استفاده از قالب ISO، CAST صریح و تست حالت مرزی راه پیشگیری است.
اثر GETDATE بر Performance چیست؟
محاسبه تابع برای هر ردیف CPU مصرف میکند و اگر روی ستون ایندکسشده در WHERE قرار گیرد ممکن است Seek را دشوار کند. در شرطهای پرتکرار، GETDATE را ابتدا در متغیر قرار دهید تا برآورد کاردینالیتی قابل پیشبینیتر شود.
Best Practice اصلی برای GETDATE چیست؟
نوع داده مناسب، قرارداد ثابت UTC یا زمان محلی، ورودی صریح و تست NULL را مستند کنید. خروجی را قبل از انتشار با داده واقعی و مرزهای تقویمی کنترل کنید.
GETDATE با کدام نسخههای SQL Server سازگار است؟
وضعیت سازگاری این تابع: همه نسخههای متداول SQL Server. علاوه بر نسخه موتور، Compatibility Level پایگاه داده و نوع مقصد را نیز بررسی کنید.