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


نحوه تبدیل date به smalldatetime در SQL Server

نحوه تبدیل date به smalldatetime در SQL Server
در این مطلب کوتاه تصمیم داریم به شما دوستان نحوه تبدیل یک مقدار نوع date را به smalldatetime تبدیل کنیم که اینکار را با چندین روش انجام خواهیم داد. هنگامی که یک مقدار تاریخ را به smallldatetime تبدیل می کنید ، اطلاعات اضافی بدان اضافه می شوند. این بدان معناست که دیتاتایپ smalldatetime حاوی اطلاعات تاریخ و زمان است. از طرف دیگر ، دیتاتایپ date فقط حاوی اطلاعات تاریخ است.در برخی موارد در زمان تبدیل date به smalldatetime ممکن است با خطا مواجه شوید خصوصا اگر تاریخ خارج از محدوده smalldatetime باشد.

نرم افزار سامانه مودیان راهکار



در مثال زیر به طور صریح، date به smalldatetime تبدیل می شود:

DECLARE @thedate date, @thesmalldatetime smalldatetime
SET @thedate = '2020-12-01'
SET @thesmalldatetime = @thedate
SELECT
@thedate AS 'date',
@thesmalldatetime AS 'smalldatetime';

+------------+---------------------+
| date | smalldatetime |
|------------+---------------------|
| 2020-12-01 | 2020-12-01 00:00:00 |
+------------+---------------------+

در این تبدیل همانطور که مشاهد کردید، از هیچ تابعی استفاده نکردیم و در این حالت ، هنگامی که می خواهیم مقدار تاریخ را به یک متغیر smallldatetime اختصاص دهیم، SQL Server در پشت صحنه تبدیل ضمنی انجام می دهد. همانطور که مشاهده می کنید، متغیر date فقط شامل اطلاعات تاریخ است ، در حالی که متغیر smallldatetime شامل اطلاعات تاریخ و زمان است و اینکه، زمان بصورت 00:00:00 نشان داده شده است چرا که date حاوی اطلاعات زمان نیست. حتی اگر به جای date، یک تاریخ بصورت رشته را هم به متغیر smalldatetime پاس دهید، باز هم همین نتیجه خروجی فوق را می گیرید.


DECLARE @thesmalldatetime smalldatetime = '2020-12-01'
SELECT @thesmalldatetime AS 'smalldatetime';

+---------------------+
| smalldatetime |
|---------------------|
| 2020-12-01 00:00:00 |
+---------------------+

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

DECLARE @thedate date, @thesmalldatetime smalldatetime
SET @thedate = '2020-12-01'
SET @thesmalldatetime = @thedate
SET @thesmalldatetime = DATEADD(hour, 7, @thesmalldatetime)
SELECT
@thedate AS 'date',
@thesmalldatetime AS 'smalldatetime';

+------------+---------------------+
| date | smalldatetime |
|------------+---------------------|
| 2020-12-01 | 2020-12-01 07:00:00 |
+------------+---------------------+

در مثال دیگر، از تابع Cast در دستور Select استفاده شده تا صراحتا عمل تبدیل بین date و smalldatetime انجام شود.

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

+------------+---------------------+
| date | smalldatetime |
|------------+---------------------|
| 2020-12-01 | 2020-12-01 00:00:00 |
+------------+---------------------+

حتی زمان را بصورت زیر هم می توانید تنظیم کنید.

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

+------------+---------------------+
| date | smalldatetime |
|------------+---------------------|
| 2020-12-01 | 2020-12-01 07:00:00 |
+------------+---------------------+

در مثال زیر، همین خروجی مثال فوق را می توانید دریافت کنید ولی به جای تابع Cast از تابع Convert استفاده شده است.

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

+------------+---------------------+
| date | smalldatetime |
|------------+---------------------|
| 2020-12-01 | 2020-12-01 00:00:00 |
+------------+---------------------+

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

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

+------------+---------------------+
| date | smalldatetime |
|------------+---------------------|
| 2020-12-01 | 2020-12-01 07:00:00 |
+------------+---------------------+

همانطور که ابتدای همین پست گفته شد، اگر تاریخ خارج از محدوده smalldatetime باشد، با خطا مواجه خواهید شد.

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

The conversion of a date data type to a smalldatetime data type resulted in an out-of-range value.

Smalldatetime فقط از بازه تاریخی 1900-01-01 تا 2079-06-06 پشتیبانی می کند.همچنین، دیتاتایپ smallldatetime فقط از بازه های زمانی 00:00:00 تا 23:59:59 پشتیبانی می کند ، بنابراین اگر بخواهید از مقداری خارج از آن محدوده استفاده کنید باز هم خطا دریافت خواهید کرد.

DECLARE @thedate date
SET @thedate = '2020-12-01'
SELECT
@thedate AS 'date',
DATEADD(nanosecond, 7, CAST(@thedate AS smalldatetime)) AS 'smalldatetime';

The datepart nanosecond is not supported by date function dateadd for data type smalldatetime.

این خطا در هنگام تبدیل رخ نمی دهد در واقع هنگام استفاده از تابع DATEADD خطایی رخ می دهد (زیرا این تابع اجازه نمی دهد آن قسمت خاص برای دیتاتایپ smalldatetime استفاده شود).


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

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

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


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