דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. ארכיון code613m
  4. Sql שימוש בערך Null ע"י אופרטור השוואה

Sql שימוש בערך Null ע"י אופרטור השוואה

מתוזמן נעוץ נעול הועבר ארכיון code613m
5 פוסטים 4 כותבים 341 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • א מנותק
    א מנותק
    ארכיטקט
    כתב ב נערך לאחרונה על ידי
    #1

    שלום, יש למישהו הסבר למה כשאני מתייחס לערכי null אני חייב להשתמש ב Is.
    אני למשל רוצה sql שיעבוד ככה:

    declare @null int = null;
    select * from Documents d where d.ContactID = @null
    

    הוא לא מחזיר לי רשומות על אף שכאשר אני עושה Is Null הוא מחזיר גם מחזיר.

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

    מי שיאמר שעבורו אין דבר כזה ערך null יצטרך לנמק. אני חושב שמסד נתונים צריך להיות בצורה שאם אין ערך צריך להיות null כלומר לא ערך כמו 0 או "" וכדומה. זה נקרא שקר! אלא מה? יגידו שבעצם במעבד יש זיהוי ל null, אז כאן כבר נכנסים לשאלה מה נקרא "אמת" במסד נתונים, הערכים הריאליים, כלומר ערכי ה"אדם" (ואז null הוא בעצם ייצוג של ריקנות, הואיל וכלפי הנתונים כפי שהם אמורים להיות מוצגים לאדם כך הם פני הדברים באמת) או הערכים המחשביים הם הקובעים, דהיינו מה שרוחש שם במעבד מתחת לאדמה ואז יבוא הטוען ויטען שערך null זה בעצם הצגה כי יש רק 0 ו 1.

    פורסם במקור בפורום CODE613 ב11/03/2014 20:15 (+02:00)

    אידיאולוגיות גדולות נכנסות למטחנה של עולם המעשה ויוצאות ממנו בפירורים (ווינסטון צ'רצ'יל, סתם סתם, זה שלי)

    תגובה 1 תגובה אחרונה
    0
    • א מנותק
      א מנותק
      ארכיטקט
      כתב ב נערך לאחרונה על ידי
      #2

      למעשה השיטה היחידה שאני רואה כרגע שאפשר לעבוד איתה כדי להתמודד עם זה ולהימנע מכפל כפליים של שאילתות היא זו:

      declare @null int = null;
      select * from Documents d where (d.ContactID is null and @null is null) or (d.ContactID = @null and @null is not null)
      

      פורסם במקור בפורום CODE613 ב11/03/2014 20:20 (+02:00)

      אידיאולוגיות גדולות נכנסות למטחנה של עולם המעשה ויוצאות ממנו בפירורים (ווינסטון צ'רצ'יל, סתם סתם, זה שלי)

      תגובה 1 תגובה אחרונה
      0
      • רחמיםר מנותק
        רחמיםר מנותק
        רחמים מורחק
        כתב ב נערך לאחרונה על ידי
        #3

        @ארכיטקט

        יש למישהו הסבר למה כשאני מתייחס לערכי null אני חייב להשתמש ב Is.

        העתקה.png

        פורסם במקור בפורום CODE613 ב11/03/2014 20:39 (+02:00)

        תגובה 1 תגובה אחרונה
        1
        • dovidD מנותק
          dovidD מנותק
          dovid ניהול
          כתב ב נערך לאחרונה על ידי
          #4

          ארכיטקט, null זה אכן חור שחור, אני לא ממש יודע למה, אבל הוא מהווה עיקרון חשוב במסד נתונים ("מידע חסר" - ראה http://en.wikipedia.org/wiki/Null_(SQL).
          אבל אתה כמעצב המסד יכול למנוע null וגם לתת ערך ברירת מחדל.

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

          select * from Documents d where (d.ContactID is null and @null is null) or d.ContactID = @null
          

          פורסם במקור בפורום CODE613 ב12/03/2014 11:50 (+02:00)

          מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

          בכל נושא אפשר ליצור קשר dovid@tchumim.com

          תגובה 1 תגובה אחרונה
          0
          • clickoneC מנותק
            clickoneC מנותק
            clickone
            כתב ב נערך לאחרונה על ידי
            #5

            למה לא להשתמש בפונקצייה ISNULL (מקביל לNZ באקסס) ואז, אם הערך הוא NULL - אתה מעביר ומחפש 0, ואם הערך 37 אתה מחזיר לפי 37.

            declare @null int = ISNULL(null,0);
            select * from Documents d where ISNULL(d.ContactID,0) = @null
            

            ובעצם גם בפנייה שלך לפונקצייה אתה "מעביר" את הערך דרך ISNULL:

            fn(ISNULL(d.ContactID,0))
            

            עריכה:
            אם זה מפתח זר,ואתה רוצה לברוח מאפשרות של 0 (במידה ולפעמים אתה שם 0 כשאין כלום, ואתה רוצה לדעת אם זה NULL או 0 במסד פיזית), אתה יכול להעביר לISNULL ערך אחר במקום 0.

            ISNULL(d.ContactID,-1))
            

            פורסם במקור בפורום CODE613 ב12/03/2014 12:14 (+02:00)

            אין טסט כמו פרודקשן.

            המייל שלי urivpn@gmail.com

            תגובה 1 תגובה אחרונה
            0

            בא תתחבר לדף היומי!
            • התחברות

            • אין לך חשבון עדיין? הרשמה

            • התחברו או הירשמו כדי לחפש.
            • פוסט ראשון
              פוסט אחרון
            0
            • דף הבית
            • קטגוריות
            • פוסטים אחרונים
            • משתמשים
            • חיפוש
            • חוקי הפורום