ทํางานกับชนิดข้อมูล

เสร็จสมบูรณ์เมื่อ

คอลัมน์และตัวแปรที่ใช้ใน Transact-SQL แต่ละรายการมีชนิดข้อมูล ลักษณะการทํางานของค่าในนิพจน์จะขึ้นอยู่กับชนิดข้อมูลของคอลัมน์หรือตัวแปรที่อ้างอิง ตัวอย่างเช่น ตามที่คุณเห็นก่อนหน้านี้ คุณสามารถใช้ตัว + ดําเนินการเพื่อเชื่อมค่าสตริงสองค่าเข้าด้วยกัน หรือเพิ่มค่าตัวเลขสองค่าได้

ตารางต่อไปนี้แสดงชนิดข้อมูลทั่วไปที่ได้รับการสนับสนุนในฐานข้อมูล SQL Server

ตัวเลขที่แน่นอน

ตัวเลขโดยประมาณ

อักขระ

Date/Time

ไบนารี

อื่นๆ

tinyint

float

CHAR

วันที่

ไบนารี

เคอร์เซอร์

smallint

จริง

varchar

เวลา

varbinary

hierarchyid

int

SMS

วันที่เวลา

รูป

sql_variant

bigint

nchar

datetime2

ตาราง

บิต

nvarchar

smalldatetime

ประทับเวลา

ทศนิยม/ตัวเลข

ntext

datetimeoffset

uniqueidentifier

ตัวเลข

xml

เงิน

geography

smallmoney

geometry

หมายเหตุ

สําหรับรายละเอียดเพิ่มเติมเกี่ยวกับชนิดข้อมูลที่แตกต่างกันและแอตทริบิวต์ โปรดไปที่เอกสารอ้างอิงTransact-SQL

การแปลงชนิดข้อมูล

ค่าชนิดข้อมูลที่เข้ากันได้สามารถแปลงโดยนัยได้ตามต้องการ ตัวอย่างเช่น สมมติว่าคุณสามารถใช้ตัว + ดําเนินการ เพื่อเพิ่มจํานวน เต็ม ไปยังตัวเลข ทศนิยม หรือเพื่อเชื่อมค่า อักขระ ที่มีความยาวคงที่และค่า แบบเชิงโครงสร้าง ความยาวตัวแปรเข้าด้วยกัน อย่างไรก็ตาม ในบางกรณีคุณอาจจําเป็นต้องแปลงค่าอย่างชัดเจนจากชนิดข้อมูลหนึ่งไปเป็นอีกชนิดข้อมูลหนึ่ง ตัวอย่างเช่น พยายามใช้ + เพื่อเชื่อมค่า แบบ varchar เข้าด้วยกันและค่า ทศนิยม จะส่งผลให้เกิดข้อผิดพลาด เว้นแต่ว่าก่อนอื่นให้คุณแปลงค่าตัวเลขเป็นชนิดข้อมูลสตริงที่เข้ากันได้

หมายเหตุ

การแปลงโดยนัยและแบบชัดเจนใช้กับข้อมูลบางประเภท และการแปลงบางอย่างไม่สามารถทําได้ สําหรับข้อมูลเพิ่มเติม ให้ใช้แผนภูมิในเอกสารอ้างอิงTransact-SQL

T-SQL มีฟังก์ชันที่ช่วยให้คุณแปลงระหว่างชนิดข้อมูลได้อย่างชัดเจน

CAST และ TRY_CAST

ฟังก์ชัน CAST แปลงค่าเป็นชนิดข้อมูลที่ระบุหากค่าเข้ากันได้กับชนิดข้อมูลเป้าหมาย ข้อผิดพลาดจะถูกส่งกลับถ้าเข้ากันไม่ได้

ตัวอย่างเช่น คิวรีต่อไปนี้ใช้ CAST เพื่อแปลงค่า จํานวนเต็ม ในคอลัมน์ ProductID เป็นค่า varchar (โดยมีสูงสุด 4 อักขระ) เพื่อเชื่อมค่าเหล่านั้นเข้าด้วยกันด้วยค่าตามอักขระอื่น:

SELECT CAST(ProductID AS varchar(4)) + ': ' + Name AS ProductName
FROM Production.Product;

ผลลัพธ์ที่เป็นไปได้จากคิวรีนี้อาจมีลักษณะดังนี้:

ชื่อผลิตภัณฑ์

680: HL Road Frame - สีดํา, 58

706: กรอบถนน HL - สีแดง, 58

707: กีฬา- 100 หมวกกันน็อก, สีแดง

708: กีฬา- 100 หมวกกันน็อก, สีดํา

...

อย่างไรก็ตาม สมมติว่าคอลัมน์ ขนาด ในตาราง Production.Product เป็นคอลัมน์ nvarchar (ความยาวตัวแปร ข้อมูลข้อความ Unicode) ที่มีขนาดตัวเลขบางตัว (เช่น 58) และขนาดข้อความบางขนาด (เช่น "S", "M" หรือ "L") คิวรีต่อไปนี้พยายามแปลงค่าจากคอลัมน์นี้เป็นชนิดข้อมูล จํานวนเต็ม :

SELECT CAST(Size AS integer) As NumericSize
FROM Production.Product;

คิวรีนี้ส่งผลให้เกิดข้อความแสดงข้อผิดพลาดต่อไปนี้:

ข้อผิดพลาด: การแปลงล้มเหลวเมื่อแปลงค่า nvarchar 'M' เป็นชนิดข้อมูล int

โดยที่อย่างน้อยค่า บาง ค่าในคอลัมน์เป็นตัวเลข คุณอาจต้องการแปลงค่าเหล่านั้นและละเว้นค่าอื่นๆ คุณสามารถใช้ฟังก์ชัน TRY_CAST เพื่อแปลงชนิดข้อมูลได้

SELECT TRY_CAST(Size AS integer) As NumericSize
FROM Production.Product;

ผลลัพธ์ในครั้งนี้อาจมีลักษณะดังนี้:

ขนาดตัวเลข

58

58

NULL

NULL

...

ค่าที่สามารถแปลงเป็นชนิดข้อมูลตัวเลขจะถูกส่งกลับเป็นค่าทศนิยมและค่าที่เข้ากันไม่ได้จะถูกส่งกลับเป็นค่า NULL ซึ่งถูกใช้เพื่อระบุว่าไม่รู้จักค่า

หมายเหตุ

เราจะสํารวจข้อควรพิจารณาสําหรับการจัดการค่า NULL ในภายหลังในหน่วยนี้

แปลงและ TRY_CONVERT

CAST เป็นฟังก์ชัน SQL มาตรฐานของ ANSI สําหรับการแปลงระหว่างชนิดข้อมูล และใช้ในระบบฐานข้อมูลจํานวนมาก ใน Transact-SQL คุณยังสามารถใช้ฟังก์ชัน CONVERT ดังที่แสดงไว้ที่นี่:

SELECT CONVERT(varchar(4), ProductID) + ': ' + Name AS ProductName
FROM Production.Product;

คิวรีนี้จะส่งกลับค่าที่แปลงเป็นชนิดข้อมูลที่ระบุดังนี้:

ชื่อผลิตภัณฑ์

680: HL Road Frame - สีดํา, 58

706: กรอบถนน HL - สีแดง, 58

707: กีฬา- 100 หมวกกันน็อก, สีแดง

708: กีฬา- 100 หมวกกันน็อก, สีดํา

...

เช่นเดียวกับ CAST CONVERT มีตัวแปร TRY_CONVERT ที่ส่งกลับ ค่า NULL สําหรับค่าที่เข้ากันไม่ได้

ประโยชน์อีกประการของการใช้ CONVERT บน CAST คือ CONVERT ยังรวมถึงพารามิเตอร์ที่ช่วยให้คุณสามารถระบุลักษณะรูปแบบเมื่อแปลงค่าตัวเลขและวันที่เป็นสตริง ตัวอย่างเช่น ให้พิจารณาคิวรีต่อไปนี้:

SELECT SellStartDate,
       CONVERT(varchar(20), SellStartDate) AS StartDate,
       CONVERT(varchar(10), SellStartDate, 101) AS FormattedStartDate 
FROM SalesLT.Product;

ผลลัพธ์จากคิวรีนี้อาจมีลักษณะดังนี้:

SellStartDate

StartDate

FormattedStartDate

2002-06-01T00:00:00.000000

วันที่ 1 มิ.ย. 2002 เวลา 12:00 น.

6/1/2002

2002-06-01T00:00:00.000000

วันที่ 1 มิ.ย. 2002 เวลา 12:00 น.

6/1/2002

2005-07-01T00:00:00.000000

ก.ค. 1 พ.ศ. 2548 12:00 น.

7/1/2005

2005-07-01T00:00:00.000000

ก.ค. 1 พ.ศ. 2548 12:00 น.

7/1/2005

...

...

...

หมายเหตุ

หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับโค้ดการจัดรูปแบบสไตล์ที่คุณสามารถใช้กับ CONVERT โปรดดูเอกสารประกอบการอ้างอิงTransact-SQL

PARSE และ TRY_PARSE

ฟังก์ชัน PARSE ได้รับการออกแบบมาเพื่อแปลงสตริงที่จัดรูปแบบซึ่งแสดงค่าตัวเลขหรือวันที่/เวลา ตัวอย่างเช่น พิจารณาคิวรีต่อไปนี้ (ซึ่งใช้ค่าสัญพจน์แทนที่จะเป็นค่าจากคอลัมน์ในตาราง):

SELECT PARSE('01/01/2021' AS date) AS DateValue,
   PARSE('$199.99' AS money) AS MoneyValue;

ผลลัพธ์ของคิวรีนี้มีลักษณะดังนี้:

DateValue

MoneyValue

2021-01-01T00:00:00.000000

199.99

ในทํานองเดียวกับ CAST และ CONVERT PARSE มีตัวแปร TRY_PARSE ที่ส่งกลับค่าที่เข้ากันไม่ได้เป็น NULL

หมายเหตุ

เมื่อทํางานกับชนิดข้อมูลแบบทศนิยมหรือตัวเลข คุณอาจต้องปัดเศษเป็นจํานวนเต็มหรือตั้งค่าจุดทศนิยมซึ่งสามารถทําได้ผ่านความแม่นยําและมาตราส่วน เพื่อให้เข้าใจแนวคิดของความแม่นยําและมาตราส่วนได้ดียิ่งขึ้น โปรดดูเอกสารประกอบการอ้างอิงTransact-SQL

STR

ฟังก์ชัน STR แปลงค่าตัวเลขเป็น varchar

เช่น:

SELECT ProductID,  '$' + STR(ListPrice) AS Price
FROM Production.Product;

ผลลัพธ์จะมีลักษณะดังนี้:

ProductID

ราคา

680

$1432.00

706

$1432.00

707

$35.00

...

...