ทํางานกับชนิดข้อมูล
คอลัมน์และตัวแปรที่ใช้ใน 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
...
...