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