آموزش جامع SQL Server (جلسه ۱۵: Data Typeهای SQL Server - بخش ۲ )
1398/03/18 17:17 , میلاد صاحب نظر

آموزش جامع SQL Server (جلسه ۱۵: Data Typeهای SQL Server - بخش ۲ )

در جلسه قبل موضوع Data Types را باز کردیم، یک مرور کلی بر روی انواع نوع‌های داده یا همان Data Type انجام دادیم و برخی از آن‌ها را همراه با توضیح کامل و مثال محور توضیح دادیم. در این جلسه به ادامه این موضوع و توضیح بقیه نوع‌های داده‌ای خواهیم پرداخت. با ما همراه باشید!

۱- نصب و آشنایی با SQL Server

۱۰-عملگرهای SET وCTEوPIVOT

۱۹-indexها بخش۱

۲۸-توابع تاریخ یا date بخش۲

۲-نوشتن query

۱۱-تغییر داده‌ها

۲۰-indexها بخش۲

۲۹-توابع رشته‌ای بخش۱

۳-محدود کردن ردیف‌ها

۱۲-تعریف داده‌ها بخش۱

۲۱-stored procedureها بخش۱

۳۰- توابع رشته‌ای بخش۲

۴-فیلتر کردن داده‌ها بخش ۱

۱۳-تعریف داده‌ها بخش۲

۲۲- stored procedureها بخش۲

۳۱- توابع رشته‌ای بخش۳

۵-فیلتر کردن داده‌ها بخش۲

۱۴-data typeهای بخش۱

۲۳- stored procedureها بخش۳

۳۲-توابع سیستمی بخش ۱

۶-اتصال جداول بخش۱

۱۵-data typeها بخش۲

۲۴-توابع تعریف شده توسط کاربر

۳۳-توابع سیستمی بخش۲

۷-اتصال جداول بخش۲

۱۶-ویژگی‌ها

۲۵-triggerها

۳۴-window functionها بخش۱

۸-گروه‌بندی داده‌ها

۱۷-expressionها

۲۶-توابع تجمعی

۳۵-window functionها بخش ۲

۹-subquery

۱۸-viewها

۲۷-توابع تاریخ یا date بخش۱

 

NCHAR در SQL Server

برای ذخیره داده‌های رشته حروف با طول ثابت و Unicode  در پایگاه داده، از نوع داده NCHAR در SQL Server استفاده می‌کنیم.

NCHAR(n)

در این syntax، مقدار n طول رشته را مشخص می‌کند که بازه آن از 1 تا 4000 است. سایز حافظه یک مقدار NCHAR دو برابر n بایت است.

هم معنی‌های ISO برای NCHAR عبارت‌اند از NATIONAL CHAR و NATIONAL CHARACTER، بنابراین می‌توانید از آن‌ها به جای یکدیگر استفاده کنید.

به طور مشابه برای نوع داده CHAR، می‌توانید از NCHAR فقط برای ذخیره رشته حروف با طول ثابت استفاده کنید. اگر طول‌های مقادیر داده‌ای متفاوت باشند، بهتر است از نوع داده VARCHAR یا NVARCHAR استفاده کنید.

CHAR در برابر NCHAR

جدول زیر تفاوت‌های اصلی بین نوع‌های داده‌ای CHAR و NCHAR را نشان می‌دهد:

CHAR

NCHAR

فقط حروف غیر Unicode را ذخیره می‌کند.

حروف Unicode را به شکل حروف UNICODE UCS-2 ذخیره می‌کند.

به 1 بایت فضا برای ذخیره یک حرف نیاز دارد.

به 2 بایت فضا برای ذخیره یک حرف نیاز دارد.

سایز حافظه برابر با سایز مشخص شده در تعریف ستون یا تعریف متغیر است.

سایز حافظه برابر با دو برابر سایز مشخص شده در تعریف ستون یا تعریف متغیر است.

تا 8000 حرف ذخیره می‌کند.

تا 4000 حرف ذخیره می‌کند.

 

مثال NCHAR در SQL Server

کد زیر یک جدول جدید با یک ستون NCHAR ایجاد می‌کند:

CREATE TABLE test.sql_server_nchar (
    val NCHAR(1) NOT NULL
);

کد INSERT زیر، حرف  به زبان ژاپنی را به ستون NCHAR اضافه می‌کند:

INSERT INTO test.sql_server_nchar (val)
VALUES
    (N'あ');

توجه کنید که باید ثابت‌های رشته حروف Unicode را با پیشوند N مشخص کنید. در غیر این صورت، SQL Server رشته را به صفحه کد پیش‌فرض پایگاه داده‌ تبدیل می‌کند که این صفحه کد ممکن است برخی حروف Uunicode خاص را نشناسد.

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

برای مثال، کد زیر تلاش می‌کند یک رشته با دو حرف را به ستون Val از جدول test.sql_server_nchar اضافه کند:

2
3
INSERT INTO test.sql_server_nchar (val)
VALUES
    (N'いえ'); 

SQL Server پیام ارور زیر را می‌دهد:

String or binary data would be truncated.
The statement has been terminated. 

برای یافتن تعداد حروف و تعداد بایت‌های مقادیر ستون val، از توابع LEN و DATALENGTH به شکل زیر استفاده می‌کنیم:

SELECT
    val,
    len(val) length,
    DATALENGTH(val) data_length
FROM
    test.sql_server_nchar;

نتایج

در نتیجه به این شکل، چگونگی استفاده از نوع داده NCHAR برای ذخیره رشته‌های حروف با طول ثابت و Unicode در پایگاه داده را آموختید.

VARCHAR در SQL Server

نوع داده VARCHAR در SQL Server برای ذخیره یک داده رشته‌ای با طول متغیر و غیر Unicode استفاده می‌شود. کد زیر syntax را نمایش می‌دهد:

VARCHAR(n)

در این syntax، مقدار n طول رشته‌ای که بازه آن از 1 تا 8000 است را تعریف می‌کند. اگر n را مشخص نکنید، مقدار پیش‌فرض آن برابر با 1 است.

روش دیگر برای تعریف یک ستون VARCHAR، استفاده از syntax زیر است:

VARCHAR(max)

در این syntax، مقدار max حداکثر سایز حافظه را مشخص می‌کند که برابر با1 - 231 بایت (یا ۲ گیگابایت) است.

در کل، سایز حافظه یک مقدار VARCHAR در واقع طول داده ذخیره شده به علاوه ۲ بایت است.

هم معنی‌های ISO برای VARCHAR عبارت‌اند از CHARVARYING‌ یا CHARACTERVARYING، در نتیجه می‌توانید به جای یکدیگر از آن‌ها استفاده کنید.

مثال VARCHAR در SQL Server

کد زیر یک جدول جدید ایجاد می‌کند که شامل ستون VARCHAR است:

CREATE TABLE test.sql_server_varchar (
    val VARCHAR NOT NULL
);

چون طول رشته در ستون val را مشخص نکردیم، به صورت پیش‌فرض این طول برابر با 1 است.

برای تغییر طول رشته در ستون Val، می‌توانید از دستور ALTER TABLE ALTER COLUMN استفاده کنید:

ALTER TABLE test.sql_server_varchar 
ALTER COLUMN val VARCHAR (10) NOT NULL;

کد زیر یک رشته جدید به ستون Val از جدول test.sql_server_varchar اضافه می‌کند:

INSERT INTO test.sql_server_varchar (val)
VALUES
    ('SQL Server');

کد همان‌طور که انتظار می‌رفت اجرا می‌شود، چون در تعریف ستون مقدار رشته دارای طول برابر با مقدار پیش‌فرض 1 است.

کد زیر تلاش می‌کند یک داده رشته‌ای جدید اضافه کند که طول آن بیشتر از طول رشته در ستون است:

INSERT INTO test.sql_server_varchar (val)
VALUES
    ('SQL Server VARCHAR');

SQL Server یک ارور می‌دهد و اجرای کد را متوقف می‌کند:

String or binary data would be truncated.
The statement has been terminated.

برای یافتن تعداد حروف و تعداد بایت‌های مقادیر ذخیره شده در ستون VARCHAR، از توابع LEN و DATALENGTH به شکل زیر استفاده می‌کنیم:

SELECT
    val,
    LEN(val) len,
    DATALENGTH(val) data_length
FROM
    test.sql_server_varchar;

نتایج

در نتیجه، چگونگی استفاده از نوع داده VARCHAR برای ذخیره داده‌های با طول متغیر و غیر Unicode در پایگاه داده را آموختید.

 

NVARCHAR در SQL Server

نوع داده NVARCHAR در SQL Server برای ذخیره داده‌های رشته‌ای با طول متغیر و Unicode استفاده می‌شود. کد زیر syntax را نشان می‌دهد:

NVARCHAR(n)

در این syntax، مقدار n طول رشته را تعریف می‌کند که بازه آن از 1 تا 4000 است. اگر طول رشته را مشخص نکنید، مقدار پیش‌فرض آن برابر با 1 است.

روش دیگر برای تعریف یک ستون NVARCHAR، استفاده از syntax زیر است:

NVARCHAR(max)

در این syntax، مقدار max سایز حافظه حداکثر به بایت است که برابر با 2^31-1 باید( یا ۲ گیگابایت) است.

در کل، سایز حافظه واقعی به بایت برای یک مقدار NVARCHAR برابر است با دو برابر تعداد حروف وارد شده به علاوه ۲ بایت.

هم معنی‌های ISO برای NVARCHAR عبارت‌اند از NATIONAL CHAR VARYING یا NATIONAL CHARACTER VARYING است، بنابراین می‌توانید از آن‌ها در تعریف متغیر یا تعریف داده‌های ستون به جای یکدیگر از آن‌ها استفاده کنید.

VARCHAR در برابر NVARCHAR

 

VARCHAR

NVARCHAR

نوع داده حروف

حروف با طول متغیر و غیر Unicode

حروف با طول متغیر هم Unicode و هم غیر Unicode مانند حروف ژاپنی، کره‌ای و چینی.

حداکثر طول

تا 8000 حرف

تا 4000 حرف

سایز حرف

برای هر حرف ۱ بایت می‌گیرد

برای هر حرف Unicode یا غیر Unicode ۲ بایت می‌گیرد

سایز حافظه

طول موجود (به بایت)

۲ برابر طول موجود (به بایت)

مورد استفاده

زمانی که طول داده متغیر یا ستون‌های با طول متغیر است و اگر داده موجود همیشه کمتر از ظرفیت است استفاده می‌شود

فقط به خاطر حافظه، فقط در صورتی که به پشتیبانی از حروف Unicode مانند حروف کانجی ژاپنی یا هانگول کره‌ای نیاز دارید، استفاده می‌شود

 

مثال NVARCHAR در SQL Server

کد زیر یک جدول جدید ایجاد می‌کند که شامل یک ستون NVARCHAR است:

CREATE TABLE test.sql_server_nvarchar (
    val NVARCHAR NOT NULL
);

در این مثال، طول رشته در ستون NVARCHAR به طور پیش‌فرض برابر با ۱ است.

برای تغییر طول رشته در ستون Val، می‌توانیم از دستور ALTER TABLE ALTER COLUMN استفاده می‌کنیم:

ALTER TABLE test.sql_server_Nvarchar 
ALTER COLUMN val NVARCHAR (10) NOT NULL;

کد زیر یک رشته جدید به ستون val از ستون Test.sql_server_nvarchar وارد می‌کند:

INSERT INTO test.sql_server_varchar (val)
VALUES
    (N'こんにちは');

کد همان‌طور که انتظار می‌رفت عمل کرد، چون مقدار رشته دارای طولی است که کمتر از طول رشته تعریف شده در تعریف ستون است.

کد زیر تلاش می‌کند یک داده رشته‌ای جدید که طول آن بیشتر از طول رشته در ستون val است را وارد جدول کند:

INSERT INTO test.sql_server_nvarchar (val)
VALUES
    (N'ありがとうございました');

SQL Server یک ارور می‌دهد و اجرا را متوقف می‌کند:

String or binary data would be truncated.
The statement has been terminated.

برای یافتن تعداد حروف و سایز حافظه به بایت برای مقادیر ذخیره شده در ستون NVARCHAR، می‌توانید از توابع LEN و DATALENGTH استفاده کنید:

SELECT
    val,
    LEN(val) len,
    DATALENGTH(val) data_length
FROM
    test.sql_server_nvarchar;

به این شکل، چگونگی استفاده از نوع داده NVARCHAR برای ذخیره داده‌های با طول متغیر و Unicode در پایگاه داده را آموختید.

DATETIME2 در SQL Server

برای ذخیره هم تاریخ و هم زمان در پایگاه داده، از نوع داده DATETIME2 استفاده می‌کنیم.

Syntax به شکل زیر است:

DATETIME2(fractional seconds precision)

استفاده از fractional seconds precision اجباری نیست. بازه آن از 0 تا 7 است.

کد زیر چگونگی ایجاد یک جدول که شامل یک ستون DATETIME2 است را نشان می‌دهد:

CREATE TABLE table_name (
    ...
    column_name DATETIME2(3),
    ...
);

DATETIME2 دارای دو جزء است: تاریخ و زمان.

  • Date یا تاریخ دارای بازه از (January 01, 01 (0001-01-01 تا (December 31, 9999 (9999-12-31 است.

  • Time یا زمان دارای بازه از 00:00:00 تا 23:59:59.9999999 است.

سایز حافظه در یک مقدار DATETIME2 بستگی به fractional secends precision دارد. در این مقدار ۶ بایت برای دقت برابر با کمتر از ۳ است، ۷ بایت برای دقت بین ۳ و ۴ است و ۸ بایت برای همه دقت‌ها است.

فرمت نوشتاری رشته پیش‌فرض DATETIME2 به شکل زیر است:

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

در این فرمت:

  • YYYY یک عدد ۴ رقمی است که نشان دهنده سال است، مانند ۲۰۱۸. بازه آن از 0001 تا 9999 است.

  • MM یک عدد ۲ رقمی است که نشان دهنده ماه است، مانند ۱۲. بازه آن از 01 تا 12 است.

  • DD یک عدد ۲ رقمی است که نشان دهنده روز از یک ماه مشخص است، مانند ۲۳. بازه آن از 01 تا 31 است.

  • hh یک عدد ۲ رقمی است که نشان دهنده ساعت است. بازه آن از 00 تا 23 است.

  • mm یک عدد دو رقمی است که نشان دهنده دقیقه است. بازه آن از 00 تا 59 است.

  • ss یک عدد ۲ رقمی است که نشان دهنده ثانیه است. بازه آن از 00 تا 59 است.

  • Fractional seconds یک عدد صفر تا ۷ رقمی است که بازه آن از 0 تا 9999999 است.

مثال DATETIME2 در SQL Server

کد زیر یک جدول جدید ایجاد می‌کند که دارای ستون created_at است که نوع داده آن DATETIME2 است:

CREATE TABLE production.product_colors (
    color_id INT PRIMARY KEY IDENTITY,
    color_name VARCHAR (50) NOT NULL,
    created_at DATETIME2
);

برای وارد کردن تاریخ و زمان فعلی در ستون created_at، از دستور INSERT با تابع ()GETDATE استفاده می‌کنیم:

INSERT INTO production.product_colors (color_name, created_at)
VALUES
    ('Red', GETDATE()); 

تابع ()GETDATE شبیه به تابع ()NOW در سیستم‌های پایگاه داده دیگر مانند MySQL است.

برای وارد کردن یک مقدار حقیقی در ستون DATETIME2، از کد زیر استفاده می‌کنیم:

INSERT INTO production.product_colors (color_name, created_at)
VALUES
    ('Green', '2018-06-23 07:30:20');

اگر می‌خواهید مقدار پیش‌فرض ستون Created_at را به تاریخ و زمان فعلی تغییر دهید، باید از دستور ALTER TABLE استفاده کنید:

ALTER TABLE production.product_colors 
ADD CONSTRAINT df_current_time 
DEFAULT CURRENT_TIMESTAMP FOR created_at;

در این کد، ما از CURRENT_TIMESTAMP برای ستون created_at استفاده کردیم. توجه کنید که CURRENT_TIMESTAMP مقدار مشابه با مقدار تابع ()GETDATE بازمی‌گرداند.

حالا، وقتی یک ردیف جدید به جدول وارد می‌کنید اما مقدار ستون created_at را مشخص نمی‌کنید، SQL Server از مقدار تاریخ و زمان فعلی برای آن ستون استفاده می‌کند:

INSERT INTO production.product_colors (color_name)
VALUES
    ('Blue');

به این شکل، چگونگی استفاده از نوع داده DATETIME2 برای ذخیره هم تاریخ و هم زمان در جدول را آموختید.

DATE در SQL Server

برای ذخیره داده تاریخ در پایگاه داده، از نوع داده DATE در SQL Server استفاده می‌کنیم. Syntax به این شکل است:

DATE

بر خلاف نوع داده DATETIME2، نوع داده DATE فقط دارای جزء تاریخ است. بازه یک مقدار DATE از (January 1, 1 CE (0001-01-01 تا (December 31, 9999 CE (9999-12-31 است.

برای ذخیره یک مقدار DATE به ۳ بایت نیاز است. فرمت رشته دقیق پیش‌فرض از یک مقدار DATE به شرح زیر است:

YYYY-DD-MM

در این فرمت:

  • YYYY یک عدد ۴ رقمی نشان دهنده سال است، که بازه آن از 0001 تا 9999 است.

  • MM یک عدد ۲ رقمی نشان دهنده ماه در سال است، که بازه آن از 01 تا 12 است.

  • DD یک عدد ۲ رقمی نشان دهنده روز در ماه است که بازه آن بسته به ماه از 01 تا 31 است.

مثال‌های DATE در SQL Server

الف) به دست آوردن داده از یک جدول بر اساس مقادیر DATE

اجازه دهید به جدول sales.orders از پایگاه داده نمونه Bikestores نگاهی داشته باشیم:

جدول sales.orders از پایگاه داده نمونه Bikestores

مثال زیر تمام سفارش‌هایی که تاریخ سفارش آن‌ها متعلق به قبل از پنجم ژانویه ۲۰۱۶ است را بازمی‌گرداند:

SELECT    
 order_id, 
 customer_id, 
 order_status, 
 order_date
FROM    
 sales.orders
WHERE order_date < '2016-01-05'
ORDER BY 
 order_date DESC;

خروجی به این شکل است:

نتایج

ب) مثال استفاده از DATE برای تعریف ستون‌های جدول

کد زیر جدولی به نام sales.list_prices ایجاد می‌کند که دارای دو ستون DATE است:

CREATE TABLE sales.list_prices (
    product_id INT NOT NULL,
    valid_from DATE NOT NULL,
    valid_to DATE NOT NULL,
    amount DEC (10, 2) NOT NULL,
    PRIMARY KEY (
        product_id,
        valid_from,
        valid_to
    ),
    FOREIGN KEY (product_id) REFERENCES production.products (product_id)
);

کد INSERT زیر چگونگی وارد کردن یک ردیف با مقادیر تاریخ دقیق به جدول را نشان می‌دهد:

INSERT INTO sales.list_prices (
    product_id,
    valid_from,
    valid_to,
    amount
)
VALUES
    (
        1,
        '2019-01-01',
        '2019-12-31',
        400
    );

به این صورت، چگونگی استفاده از نوع داده DATE برای ذخیره داده تاریخ در یک جدول را آموختید.

TIME در SQL Server

نوع داده TIME زمان یک روز را بر اساس ۲۴ ساعت تعریف می‌کند. Syntax آن به این شکل است:

TIME[ (fractional second scale) ]

Fractional second scale تعداد ارقام برای بخش اعشاری ثانیه‌ها را مشخص می‌کند. بازه Fractional second scale از 0 تا 7 است. اگر Fractional second scale  را واضح مشخص نکرده باشید، به طور پیش‌فرض مقدار آن برابر 7 است.

مثال زیر چگونگی ایجاد یک جدول دارای ستون TIME را نشان می‌دهد:

CREATE TABLE table_name(
    ...,
    start_at TIME(0),
    ...
);

فرمت دقیق پیش‌فرض برای یک مقدار TIME به این شکل است:

hh:mm:ss[.nnnnnnn]

در این فرمت:

  • hh یک عدد دو رقمی است که نشان دهنده ساعت است و دارای بازه 0 تا 23 است.

  • mm یک عدد دو رقمی است که نشان دهنده دقیقه است و دارای بازه 0 تا 59 است.

  • ss یک عدد دو رقمی است که نشان دهنده ثانیه است و دارای بازه 0 تا 59 است.

  • بخش اعشاری ثانیه‌ها می‌تواند صفر تا 7 رقم باشد که دارای بازه 0 تا 9999999 است.

مقدار زمان A با دقت ثانیه اعشاری پیش‌فرض ۱۰۰ میکروثانیه به ۵  بایت حافظه نیاز دارد.

توجه کنید که نوع داده TIME هیچ آگاهی از منطقه زمانی ندارد.

مثال نوع داده TIME در SQL Server

کد زیر یک جدول جدید به نام sales.visits با دو ستون TIME ایجاد می‌کند که زمان ملاقات مشتریان در یک فروشگاه خاص را ثبت می‌کند:

CREATE TABLE sales.visits (
    visit_id INT PRIMARY KEY IDENTITY,
    customer_name VARCHAR (50) NOT NULL,
    phone VARCHAR (25),
    store_id INT NOT NULL,
    visit_on DATE NOT NULL,
    start_at TIME (0) NOT NULL,
    end_at TIME (0) NOT NULL,
    FOREIGN KEY (store_id) REFERENCES sales.stores (store_id)
);

کد INSERT زیر یک ردیف به جدول sales.visits اضافه می‌کند:

INSERT INTO sales.visits (
    customer_name,
    phone,
    store_id,
    visit_on,
    start_at,
    end_at
)
VALUES
    (
        'John Doe',
        '(408)-993-3853',
        1,
        '2018-06-23',
        '09:10:00',
        '09:30:00'
    );

به این صورت، چگونگی استفاده از نوع داده TIME برای ذخیره مقادیر زمان در یک جدول را آموختید.

DATETIMEOFFSET در SQL Server

DATETIMEOFFSET به شما امکان دست‌کاری تمام نقاط زمان را می‌دهد. این نوع داده در واقع یک مقدار datetime است که یک offset نیز به همراه دارد و مشخص می‌کند که آن Datetime چقدر با UTC متفاوت است.

Syntax آن به این شکل است:

DATETIMEOFFSET [ (fractional seconds precision) ]

برای تعریف یک متغیر DATETIMEOFFSET، از syntax زیر استفاده می‌کنیم:

DECLARE @dt DATETIMEOFFSET(7)

برای ایجاد یک ستون جدول که نوع داده آن DATETIMEOFFSET است، از کد زیر استفاده می‌کنیم:

CREATE TABLE table_name (
    ...,
    column_name DATETIMEOFFSET(7)
    ...
);

DATETIMEOFFSET دارای بازه از January 1, 1 CE تا December 31, 999 CE است. بازه زمان از 00:00:00 تا 23:59:59.9999999 است.

فرمت‌های دقیق

فرمت‌های دقیق DATETIMEOFFSET به شکل زیر هستند:

YYYY-MM-DDThh:mm:ss[.nnnnnnn][{+|-}hh:mm]

برای مثال:

2020-12-12 11:30:30.12345 

یا با ISO:

YYYY-MM-DDThh:mm:ss[.nnnnnnn]Z

برای مثال:

2020-12-12 19:30:30.12345Z.

افست منطقه زمانی

برای یک مقدار datetime یا time، افست منطقه زمانی اختلاف منطقه از UTC را مشخص می‌کند. یک افست منطقه زمانی به شکل hh:mm [-|+] نشان داده می‌شود:

  • hh یک عدد دو رقمی با بازه 00 تا 14 است که نشان دهنده عدد ساعت در افست منطقه زمانی است.

  • mm یک عدد دو رقمی با بازه 00 تا 59 است که نشان دهنده عدد دقایق اضافی در افست منطقه زمانی است.

  • +(به علاوه) یا –(منها) مشخص می‌کند که آیا افست منطقه زمانی برای نشان داده زمان محلی از زمان UTC کم یا به آن اضافه می‌شود.

بازه قابل قبول یک افست منطقه زمانی از 14:00- تا 14:00+ است.

مثال‌های DATETIMEOFFSET

اول، یک جدول به نام messages ایجاد کنید که دارای یک ستون DATETIMEOFFSET باشد:

CREATE TABLE messages(
    id         INT PRIMARY KEY IDENTITY, 
    message    VARCHAR(255) NOT NULL, 
    created_at DATETIMEOFFSET NOT NULL
);

دوم، یک ردیف جدید با مقدار DATETIMEOFFSET به جدول messages اضافه کنید:

INSERT INTO messages(message,created_at)
VALUES('DATETIMEOFFSET demo',
        CAST('2019-02-28 01:45:00.0000000 -08:00' AS DATETIMEOFFSET));

سوم، از جدول messages داده‌ها را به دست آورید و از AT TIME ZONE برای تبدیل مقدار DATETIMEOFFSET ذخیره شده به منطقه زمانی 'SE Asia Standard Time' استفاده کنید.

SELECT 
    id, 
    message, 
 created_at 
        AS 'Pacific Standard Time'
    created_at AT TIME ZONE 'SE Asia Standard Time' 
        AS 'SE Asia Standard Time',
FROM 
    messages;

خروجی به این شکل است:

نتایج

GUID در SQL Server

همه چیز در دنیای ما عدد گذاری شده است، مانند کتاب‌ها که دارای ISBN هستند، ماشین‌ها دارای VIN هستند و افراد هم که شماره شناسنامه (SSN) دارند.

اعداد، یا شناساگرها (identifireها)، به ما کمک می‌کنند تا بدون اشتباه به همه چیز رفرنس و اشاره کنیم. برای مثال، می‌توانیم John Doe را با استفاده از شماره شناسنامه منحصر به فردش که 6789-45-123 است شناسایی کنیم.

یک شناساگر منحصر به فرد جهانی یا GUID در  واقع یک نسخه وسیع‌تر از این نوع شماره‌های ID است.

یک GUID به صورت تضمینی در بین جداول، پایگاه داده‌ها و حتی سرورها منحصر به فرد است.

در SQL Server، نوع داده GUID یک باینری ۱۶ بایتی است که با استفاده از تابع ()NEWID تولید می‌شود:

SELECT 
    NEWID() AS GUID;

اگر کد بالا را چندین بار اجرا کنید، هر دفعه مقدار متفاوتی مشاهده خواهید کرد. یکی از آن‌ها را در زیر مشاهده می‌کنید:

GUID
------------------------------------
3297F0F2-35D3-4231-919D-1CFCF4035975
 
(1 row affected)

در SQL Server، نوع داده UNIQUEIDENTIFIER، مقادیر GUID را نگه می‌دارد.

کد زیر یک متغیر با نوع UNIQUEIDENTIFIER تعریف کرده و آن را به یک مقدار GUID تولید شده توسط تابع ()NEWID تخصیص می‌دهد.

DECLARE 
    @id UNIQUEIDENTIFIER;
 
SET @id = NEWID();
 
SELECT 
    @id AS GUID;

خروجی به این شکل است:

GUID
------------------------------------
69AA3BA5-D51E-465E-8447-ECAA1939739A
 
(1 row affected)

استفاده از GUID به عنوان کلید اصلی

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

استفاده از GUID به عنوان کلید اصلی یک جدول مزایای زیر را در بر دارد:

  • مقادیر GUID به صورت جهانی در بین جداول، پایگاه‌های داده و حتی سرورها منحصر به فرد هستند. در نتیجه، می‌توانید داده‌ها را از سرورهای مختلف به آسانی با هم ادغام کنید.

  • مقادیر GUID اطلاعات را بروز نمی‌دهند، بنابراین استفاده از آن‌ها در واسطهای عمومی مانند یک URL امن‌تر است. برای مثال، اگر شما یک URL به شکل /https://www.example.com/customer/100 دارید، فهمیدن اینکه مشتریانی با id به شماره 101، 102 و الی آخر وجود خواهند داشت، کار مشکلی نیست.

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

  • مقادیر GUID (شانزده بایت) فضای حافظه بیشتری نسبت به INT (چهار بایت) یا حتی نسبت به BIGINT (هشت بایت) نیاز دارند.

  • مقادیر GUID رفع مشکل و دیباگ را مشکل‌تر می‌کنند، کافی است WHERE id = 100 را با 'WHERE id = 'F4AB02B7-9D55-483D-9081-CC4E3851E851 مقایسه کنید.

مثال‌های GUID در SQL Server

اول، یک جدول جدید به نام customers در شمای marketing ایجاد کنید:

CREATE SCHEMA marketing;
GO
 
CREATE TABLE marketing.customers(
    customer_id UNIQUEIDENTIFIER DEFAULT NEWID(),
    first_name NVARCHAR(100) NOT NULL,
    last_name NVARCHAR(100) NOT NULL,
    email VARCHAR(200) NOT NULL
);
GO

دوم، ردیف‌های جدید به جدول marketing.customers اضافه کنید:

INSERT INTO 
    marketing.customers(first_name, last_name, email)
VALUES
    ('John','Doe','john.doe@example.com'),
    ('Jane','Doe','jane.doe@example.com');

سوم، داده را از جدول marketing.customers به دست آورید:

SELECT 
    customer_id, 
    first_name, 
    last_name, 
    email
FROM 
    marketing.customers;

خروجی به این شکل است:

نتایج

به این صورت، در مورد GUID و چگونگی استفاده از تابع ()NEWID برای تولید مقادیر GUID آموختید.

خلاصه

در این جلسه به صورت کامل مبحث Data Typeهای SQL Server را بررسی کردیم و به طور کامل مباحث آن که عبارت‌اند از DATETIMEOFFSET، TIME، DATE، DATETIME2، NVARCHAR، VARCHAR، NCHAR، CHAR، DECIMAL، INT، BIT و GUID بود را به صورت مثال محور و کامل توضیح دادیم.

در جلسه آینده در مورد قوانین و خصوصیات صحبت خواهیم کرد.

با MUG همراه باشید!

منبع: sqlservertutorial

 مطالب مرتبط

۱۳ دستور مهم SQL که هر برنامه‌نویس باید بداند
چگونه از حملات نفوذ کننده به SQL جلوگیری کنیم؟
 طبقه بندی زبان های برنامه نویسی
روش‌های هوشمندانه برای استفاده از "تلفیق" در SQL
 LINQ(زبان جستجوی یکپارچه)
برنامه نویسی شیءگرا چیست؟

از آخرین دوره های آموزشی و تخفیف ها مطلع شوید

با تکمیل فرم زیر ، از اخبار و اطلاعات به روز برنامه نویسی و تکنولوژی عقب نمانید

آخرین مطالب

آموزش جامع SQL Server (جلسه ۱۲)
آموزش جامع SQL Server (جلسه ۱۲)

دستور UPDATE در SQL Server برای تغییر داده‌های موجود در یک جدول، از دستور UPDATE به شکل زیر استفاده ...

آموزش جامع SQL Server (جلسه ۱۵)
آموزش جامع SQL Server (جلسه ۱۵)

دستور DROP TABLE در SQL Server گاهی، لازم است یک جدول که دیگر استفاده‌ای ندارد را حذف کنید. برای ...

آموزش جامع SQL Server (جلسه ۳۵: Window Functionها – بخش ۲)
آموزش جامع SQL Server (جلسه ۳۵: Window Functionها – بخش ۲)

بخش اول از آخرین مبحث دوره جامع آموزش SQL Server در جلسه قبلی بررسی شد. این مبحث که ...

آخرین دیدگاه ها

دیدگاه خود را درباره این پست بنویسید

فرم ارسال نظرات