จัดการค่า NULL
ค่า NULL หมายความว่าไม่มีค่าหรือไม่รู้จัก ซึ่งไม่ได้หมายถึงศูนย์หรือค่าว่าง หรือแม้แต่สตริงว่าง ไม่ทราบค่าเหล่านั้น ค่า NULL สามารถใช้สําหรับค่าที่ยังไม่ได้ระบุ ตัวอย่างเช่น เมื่อลูกค้ายังไม่ได้ใส่ที่อยู่อีเมล ตามที่คุณเคยเห็นก่อนหน้านี้ ค่า NULL ยังสามารถถูกส่งกลับโดยฟังก์ชันการแปลงบางฟังก์ชันถ้าค่าไม่เข้ากันกับชนิดข้อมูลเป้าหมาย
คุณมักจะต้องใช้ขั้นตอนพิเศษเพื่อจัดการกับ NULL NULL เป็นค่าที่ไม่ใช่ค่าจริง ๆ ไม่รู้จัก มันไม่เท่ากับอะไรเลย และไม่เท่ากันเลย NULL ไม่มากกว่าหรือน้อยกว่าสิ่งใด เราไม่สามารถพูดเกี่ยวกับสิ่งที่เป็นได้ แต่ในบางครั้งเราจําเป็นต้องทํางานกับค่า NULL โชคดีที่ T-SQL มีฟังก์ชันสําหรับการแปลงหรือแทนที่ค่า NULL
ISNULL
ฟังก์ชัน ISNULL ใช้สองอาร์กิวเมนต์ สิ่งแรกคือนิพจน์ที่เรากําลังทดสอบ ถ้าค่าของอาร์กิวเมนต์แรกนั้นเป็น NULL ฟังก์ชันจะแสดงอาร์กิวเมนต์ที่สอง ถ้านิพจน์แรกไม่ใช่ null นิพจน์นั้นจะถูกส่งกลับไม่เปลี่ยนแปลง
ตัวอย่างเช่น สมมติว่าตาราง Sales.Customer ในฐานข้อมูลมีคอลัมน์ MiddleName ที่อนุญาตให้มีค่า NULL เมื่อทําการคิวรีตารางนี้ แทนที่จะส่งกลับค่า NULL ในผลลัพธ์ คุณอาจเลือกที่จะส่งคืนค่าเฉพาะเช่น "ไม่มี"
SELECT FirstName,
ISNULL(MiddleName, 'None') AS MiddleIfAny,
LastName
FROM Sales.Customer;
ผลลัพธ์จากคิวรีนี้อาจมีลักษณะดังนี้:
FirstName
MiddleIfAny
LastName
ออร์ แลน โด
N.
จี
คีธ
ไม่มีใคร
โฮเวิร์ด
ดอนน่า
F.
Gonzales
...
...
...
หมายเหตุ
ค่าที่แทนที่สําหรับ NULL ต้องเป็นข้อมูลชนิดเดียวกันกับนิพจน์ที่กําลังประเมิน ในตัวอย่างข้างต้น MiddleName เป็น varchar ดังนั้นค่าที่ใช้แทนไม่สามารถเป็นตัวเลขได้ นอกจากนี้ คุณจะต้องเลือกค่าที่จะไม่ปรากฏในข้อมูลเป็นค่าปกติ บางครั้งอาจเป็นเรื่องยากในการค้นหาค่าที่จะไม่ปรากฏในข้อมูลของคุณ
ตัวอย่างก่อนหน้านี้จัดการค่า NULL ในตารางแหล่งข้อมูล แต่คุณสามารถใช้ ISNULL กับนิพจน์ใด ๆ ที่อาจส่งกลับค่า NULL รวมถึงการซ้อนฟังก์ชัน TRY_CONVERT ภายในฟังก์ชัน ISNULL
COALESCE
ฟังก์ชัน ISNULL ไม่ใช่มาตรฐาน ANSI ดังนั้นคุณอาจต้องการใช้ฟังก์ชัน COALESCE แทน COALESCE มีความยืดหยุ่นมากกว่าเล็กน้อยซึ่งสามารถใช้จํานวนตัวแปรของอาร์กิวเมนต์ ซึ่งแต่ละตัวเป็นนิพจน์ ซึ่งจะส่งกลับนิพจน์แรกในรายการที่ไม่ใช่ NULL
ถ้ามีเพียงสองอาร์กิวเมนต์เท่านั้น COALESCE จะทํางานเหมือน ISNULL อย่างไรก็ตาม ด้วยอาร์กิวเมนต์มากกว่าสองอาร์กิวเมนต์ COALESCE สามารถใช้เป็นทางเลือกแทนนิพจน์ CASE แบบหลายส่วนโดยใช้ ISNULL
ถ้าอาร์กิวเมนต์ทั้งหมดเป็น NULL COALESCE จะแสดงเป็น NULL นิพจน์ทั้งหมดต้องส่งกลับชนิดข้อมูลเดียวกันหรือเข้ากันได้
โดยมีไวยากรณ์ดังต่อไปนี้:
SELECT COALESCE ( expression1, expression2, [ ,...n ] )
ตัวอย่างต่อไปนี้ใช้ตารางสมมุติที่เรียกว่า HR ค่าจ้าง ซึ่งรวมถึงสามคอลัมน์ที่มีข้อมูลเกี่ยวกับรายได้ต่อสัปดาห์ของพนักงาน: อัตราต่อชั่วโมง เงินเดือนรายสัปดาห์ และค่าคอมมิชชันต่อหน่วยที่ขาย อย่างไรก็ตาม พนักงานจะได้รับค่าจ้างชนิดเดียวเท่านั้น สําหรับพนักงานแต่ละคน หนึ่งในสามคอลัมน์เหล่านั้นจะมีค่า หนึ่งคอลัมน์อีกสองคอลัมน์จะเป็น NULL เมื่อต้องการกําหนดจํานวนเงินทั้งหมดที่ชําระให้กับพนักงานแต่ละคน คุณสามารถใช้ COALESCE เพื่อแสดงเฉพาะค่าที่ไม่ใช่ null ที่พบในสามคอลัมน์เหล่านั้นได้
SELECT EmployeeID,
COALESCE(HourlyRate * 40,
WeeklySalary,
Commission * SalesQty) AS WeeklyEarnings
FROM HR.Wages;
ผลลัพธ์อาจมีลักษณะดังนี้:
EmployeeID
WeeklyEarnings
1
899.76
2
1001.00
3
1298.77
...
...
NULLIF
ฟังก์ชัน NULLIF ช่วยให้คุณสามารถส่งคืนค่า NULL ได้ภายใต้เงื่อนไขบางอย่าง ฟังก์ชันนี้มีแอปพลิเคชันที่มีประโยชน์ในพื้นที่ เช่น การล้างข้อมูล เมื่อคุณต้องการแทนที่อักขระว่างหรือตัวแทนด้วย NULL
NULLIF จะใช้สองอาร์กิวเมนต์และส่งกลับค่า NULL หากเทียบเท่ากัน ถ้าไม่เท่ากัน NULLIF จะแสดงอาร์กิวเมนต์แรก
ในตัวอย่างนี้ NULLIF จะแทนที่ส่วนลด 0 ด้วย NULL ซึ่งจะส่งกลับค่าส่วนลดถ้าไม่ใช่ 0:
SELECT SalesOrderID,
ProductID,
UnitPrice,
NULLIF(UnitPriceDiscount, 0) AS Discount
FROM Sales.SalesOrderDetail;
ผลลัพธ์อาจมีลักษณะดังนี้:
SalesOrderID
ProductID
UnitPrice
ส่วนลด
71774
836
356.898
โมฆะ
71780
988
112.998
0.4
71781
748
818.7
โมฆะ
71781
985
112.998
0.4
...
...
...
...