خوش آموز درخت تو گر بار دانش بگیرد، به زیر آوری چرخ نیلوفری را


نحوه تبدیل Date به datetime2 در SQL Server

نحوه تبدیل Date به datetime2 در SQL Server
در پست های قبلی نحوه تبدیل انواع دیتاتایپ های تاریخ به یکدیگر را با ذکر مثال بررسی کردیم و در پست هم نحوه تبدیل مقادیر date به datetime2 را همراه با مثال بررسی خواهیم کرد. هنگامی که یک مقدار date را به datetime2 تبدیل می کنید ، اطلاعات اضافی به مقدار اضافه می شوند چرا که datetime2 حاوی اطلاعات تاریخ و زمان بوده و date فقط حاوی تاریخ است.

نرم افزار سامانه مودیان راهکار
Datetime2 اساسا نوع extend شده از datetime است که دقت آن بسیار بیشتر است. میزان دقت آن هم در تاریخ و هم در زمان بیشتر از datetime است و میزان دقت آن توسط کاربر می تواند تعیین شود.


در مثال زیر مقدار date به Datetime2 تبدیل می شود:

DECLARE @thedate date, @thedatetime2 datetime2
SET @thedate = '2020-12-01'
SET @thedatetime2 = @thedate
SELECT
@thedate AS 'date',
@thedatetime2 AS 'datetime2';

+------------+-----------------------------+
| date | datetime2 |
|------------+-----------------------------|
| 2020-12-01 | 2020-12-01 00:00:00.0000000 |
+------------+-----------------------------+

در مثال از هیچ تابعی برای تبدیل استفاده نشد. در مثال فوق مقدار متغیر date را به متغیر datetime2 پاس دادیم و عمل تبدیل توسط SQL Server در پشت صحنه انجام شده و نمایش داده شد.
وقتی مقدار date را به datetime2 با دقت 7 تبدیل می کنید، مولفه زمان بصورت پیشفرض روی 00: 00: 00.0000000 تنظیم می شود. در صورت تمایل می توانید دقت را کاهش دهید. کاهش دقت می تواند فضای مورد نیاز برای ذخیره مقدار را کاهش دهد. ضمنا دلیل اینکه زمان 0 است، این است که Date فقط حاوی تاریخ بوده و زمانی به datetime2 پاس نمی دهد.
اگر می خواهید زمانی را مشخص کنید (اما همان تاریخ را حفظ کنید) ، می توانید از تابع DATEADD برای انجام این کار استفاده کنید.

DECLARE @thedate date, @thedatetime2 datetime2
SET @thedate = '2020-12-01'
SET @thedatetime2 = @thedate
SET @thedatetime2 = DATEADD(hour, 8, @thedatetime2)
SELECT
@thedate AS 'date',
@thedatetime2 AS 'datetime2';

+------------+-----------------------------+
| date | datetime2 |
|------------+-----------------------------|
| 2020-12-01 | 2020-12-01 08:00:00.0000000 |
+------------+-----------------------------+

در مثال زیر، تابع CAST در Select عمل تبدیل را انجام می دهد.

DECLARE @thedate date
SET @thedate = '2020-12-01'
SELECT
@thedate AS 'date',
CAST(@thedate AS datetime2) AS 'datetime2';

+------------+-----------------------------+
| date | datetime2 |
|------------+-----------------------------|
| 2020-12-01 | 2020-12-01 00:00:00.0000000 |
+------------+-----------------------------+

همانطور که ملاحظه می کنید، دقیقا همان نتیجه ای را که در اسکریپت قبل گرفتیم، خروجی کوئری فوق هم نمایش داده شد.
همچنین می توانیم زمان را به صورت زیر تنظیم کنیم:

DECLARE @thedate date
SET @thedate = '2020-12-01'
SELECT
@thedate AS 'date',
DATEADD(hour, 8, CAST(@thedate AS datetime2)) AS 'datetime2';

+------------+-----------------------------+
| date | datetime2 |
|------------+-----------------------------|
| 2020-12-01 | 2020-12-01 08:00:00.0000000 |
+------------+-----------------------------+

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

DECLARE @thedate date
SET @thedate = '2020-12-01'
SELECT
@thedate AS 'date',
CONVERT(datetime2, @thedate) AS 'datetime2';

+------------+-----------------------------+
| date | datetime2 |
|------------+-----------------------------|
| 2020-12-01 | 2020-12-01 00:00:00.0000000 |
+------------+-----------------------------+

همچنین می توانیم زمان را به صورت زیر تنظیم کنیم:

DECLARE @thedate date
SET @thedate = '2020-12-01'
SELECT
@thedate AS 'date',
DATEADD(hour, 8, CONVERT(datetime2, @thedate)) AS 'datetime2';

+------------+-----------------------------+
| date | datetime2 |
|------------+-----------------------------|
| 2020-12-01 | 2020-12-01 08:00:00.0000000 |
+------------+-----------------------------+

بصورت پیشفرض، datetime2 دقت 7 را به شما می دهد و در صورتی که به این میزان دقت نیاز ندارید، می توانید این دقت را کاهش دهید.

DECLARE @thedate date
SET @thedate = '2020-12-01'
SELECT
@thedate AS 'date',
CONVERT(datetime2(2), @thedate) AS 'datetime2(2)',
CONVERT(datetime2(4), @thedate) AS 'datetime2(4)';

+------------+------------------------+--------------------------+
| date | datetime2(2) | datetime2(4) |
|------------+------------------------+--------------------------|
| 2020-12-01 | 2020-12-01 00:00:00.00 | 2020-12-01 00:00:00.0000 |
+------------+------------------------+--------------------------+

یکی از مزایای کاهش دقت این است که می توانید میزان فضای مورد نیاز برای ذخیره مقدار را نیز کاهش دهید. به طور خاص ، 6 بایت برای دقت کمتر از 3 ، 7 بایت برای دقت 3 یا 4 و سایر دقت ها به 8 بایت نیاز دارند.


نمایش دیدگاه ها (0 دیدگاه)

دیدگاه خود را ثبت کنید:

انتخاب تصویر ویرایش حذف
توجه! حداکثر حجم مجاز برای تصویر 500 کیلوبایت می باشد.


دسته بندی مطالب خوش آموز