כתובות NUL של נקודת אחיזה

הושלמה

ערך NULL פירושו שאין ערך או לא ידוע. משמעותה אינה אפס או ריק, או אפילו מחרוזת ריקה. ערכים אלה אינם ידועים. ניתן להשתמש בערך NULL עבור ערכים שעדיין לא סופנו, לדוגמה, כאשר לקוח עדיין לא סיפק כתובת דואר אלקטרוני. כפי שראית בעבר, פונקציות המרה מסוימות יכולות להחזיר ערך NULL אם ערך אינו תואם לסוג הנתונים המשמש כיעד.

לעתים קרובות תצטרך לבצע שלבים מיוחדים כדי לטפל ב- NULL. NULL הוא באמת לא ערך. זה לא ידוע . זה לא שווה לכל דבר, וזה לא שווה לכל דבר. NULL אינו גדול או קטן מכל דבר. לא ניתן לומר דבר על מה שזה, אך לפעמים עלינו לעבוד עם ערכי NULL. תודה רבה, T-SQL מספק פונקציות להמרה או החלפה של ערכי NULL.

לא מותך

הפונקציה ISNULL מקבלת שני ארגומנטים. הראשון הוא ביטוי שאנו בודקים. אם הערך של הארגומנט הראשון הוא NULL, הפונקציה מחזירה את הארגומנט השני. אם הביטוי הראשון אינו Null, הוא מוחזר ללא שינוי.

לדוגמה, נניח שהטבלה Sales.Customer במסד נתונים כוללת עמודת MiddleName המאפשרת ערכי NULL. בעת ביצוע שאילתה על טבלה זו, במקום להחזיר NULL בתוצאה, באפשרותך לבחור להחזיר ערך ספציפי, כגון "ללא".

SELECT FirstName,
      ISNULL(MiddleName, 'None') AS MiddleIfAny,
      LastName
FROM Sales.Customer;

התוצאות מהשאילתה עשויות להיראות כך:

שם פרטי

כל האפשרויות האמצעיות

שם משפחה

אורלנדו

N.

בחיי

קית '

ללא

הווארד

דונה

F.

גונזלס

...

...

...

הערה

הערך החלופי ב- NULL חייב להיות אותו סוג נתונים כמו הביטוי המוערך. בדוגמה שלעיל, MiddleName הוא varchar, ולכן הערך החלופי לא יכול להיות מספרי. בנוסף, יהיה עליך לבחור ערך שלא יופיע בנתונים כערך רגיל. לפעמים קשה למצוא ערך שלעולם לא יופיע בנתונים שלך.

הדוגמה הקודמת טפלה בערך NULL בטבלת המקור, אך באפשרותך להשתמש ב- ISNULL עם כל ביטוי שעשוי להחזיר NULL, כולל קינון פונקציית TRY_CONVERT בתוך הפונקציה ISNULL.

מתמזג

הפונקציה ISNULL אינה תקן ANSI, ולכן מומלץ להשתמש בפונקציה COALESCE במקום זאת. הפונקציה COALESCE מעט גמישה יותר מאחר שהיא יכולה לקבל מספר משתנה של ארגומנטים, שכל אחד מהם הוא ביטוי. הוא יחזיר את הביטוי הראשון ברשימה שאינו NULL.

אם יש רק שני ארגומנטים, הפונקציה COALESCE מתנהגת כמו ISNULL. עם זאת, עם יותר משני ארגומנטים, הפונקציה COALESCE יכולה לשמש כ חלופה לביטוי CASE מרובה חלקים באמצעות הפונקציה ISNULL.

אם כל הארגומנטים הם NULL, הפונקציה COALESCE מחזירה NULL. כל הביטויים חייבים להחזיר סוגי נתונים זהים או תואמים.

התחביר הוא כדלקמן:

SELECT COALESCE ( expression1, expression2, [ ,...n ] )

הדוגמה הבאה משתמשת בטבלה מלאכותית הנקראת משאבי אנוש. משכורות, הכוללות שלוש עמודות המכילות מידע על הרווחים השבועיים של העובדים: התעריף לשעה, השכר השבועי ועמלה ליחידה שנמכרת. עם זאת, עובד מקבל תשלום מסוג אחד בלבד. עבור כל עובד, באחת משלוש עמודות אלה יהיה ערך, שתי העמודות האחרות יהיו NULL. כדי לקבוע את הסכום הכולל ששולם לכל עובד, באפשרותך להשתמש ב- COALESCE כדי להחזיר רק את הערך שאינו Null שנמצא בשלוש עמודות אלה.

SELECT EmployeeID,
      COALESCE(HourlyRate * 40,
                WeeklySalary,
                Commission * SalesQty) AS WeeklyEarnings
FROM HR.Wages;

התוצאות עשויות להיראות בערך כך:

מזהה עובד

למידה שבועית

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

מזהה מוצר

מחיר יחידה

הנחה

71774

836

356.898

אֶפֶס

71780

988

112.998

0.4

71781

748

818.7

אֶפֶס

71781

985

112.998

0.4

...

...

...

...