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

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

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

SQL: שאילתה שתחזיר רשומות מספרים או תאריכים מתוך טווח נתון

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

    אני לא רוצה לסנן אני רוצה לשכפל רשומות.

    הטבלה שלי נראית כך:


    ToNumber | FromNumber |
    ___________||
    100-----------|300----------|
    ___________|
    |
    מה שאני מצפה זה לקבל רשימה ארוכה של 201 מספרים עוקבים, שבין 100 ל 300 כולל אותם.

    פורסם במקור בפורום CODE613 ב24/01/2014 14:49 (+02:00)

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

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

      הוא רוצה ככה למשל.

      SELECT FUNC(100,300);
      

      ושזה יביא טבלה כזאת

      -----------------
      | FUNC(100,300) | 
      -----------------
      | 100           |
      -----------------
      | 101           |
      -----------------
      | 102           |
      -----------------
      | ...           |
      -----------------
      | 298           |
      -----------------
      | 299           |
      -----------------
      | 300           |
      -----------------
      

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

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

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

        פורסם במקור בפורום CODE613 ב24/01/2014 15:29 (+02:00)

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

          אני שמח שהתחושות שלי היו נכונות, למרבה המזל יש דרך לעשות את זה ב sql נקי במידת האפשר.

          with cte as
          (select 1 i union all
           select i+1 i from cte where i < 5)
          select dateadd(YEAR, i-1, '2010-01-01') from cte
          

          מקור
          אז מבחינתי הנושא נפתר, ואגב זה דבר שימושי ביותר למשתמשי SQL ואני חושב שיש כאן מן הבשורה :smile:

          פורסם במקור בפורום CODE613 ב25/01/2014 22:29 (+02:00)

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

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

            תודה רבה!
            תוכל להסביר לאנשים כמוני מה כל שורה בקוד הזה עושה?
            תודה.

            פורסם במקור בפורום CODE613 ב26/01/2014 08:03 (+02:00)

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

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

              כאן יש תיעוד רשמי MSDN
              כאן יש מדריך בקוד פרוייקט

              כל היתר תשאלו את רבי שרגא יהושע העשיל מגוגל :lol:

              פורסם במקור בפורום CODE613 ב26/01/2014 09:43 (+02:00)

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

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

                יש כאן שילוב של טריקים, כל אחד מצריך לימוד מעמיק.
                ואני ממש לא מכיר ומבין, ואיך עוד אסביר?

                פורסם במקור בפורום CODE613 ב26/01/2014 14:43 (+02:00)

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

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

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

                  כעת צריך את זה ב mysql (בשביל מה?? בשביל טבלת זימון תורים, איך לא...) מישהו יודע???

                  פורסם במקור בפורום CODE613 ב30/07/2014 22:22 (+03:00)

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

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

                    וואו זה גאוני: אבל טוחן משאבים, ולוקח 5 שניות לטעון אותו כבר עדיף טבלה זמנית... (אגב את השורה הארוכה של הסלקט האחרון 1-10 אפשר למחוק, הוא עדין נותן 1000 רשומות)

                    פורסם במקור בפורום CODE613 ב30/07/2014 22:47 (+03:00)

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

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

                      OK זה נראה שאני היחיד שמכיר - ויש לי טריקים נוספים אפילו . . . <!-- s8-) --><img src="{SMILIES_PATH}/icon_cool.gif" alt="8-)" title="מגניב" /><!-- s8-) -->

                      אגב שלא תגידו שלא אמרתי - התכונה הזו כמעט בת עשר (מ 2005) . . .

                      ואני הקטן אנסה להסביר:
                      הגדרה של CTE עשית על ידי שימוש במילה WITH כמו בדוגמה
                      היא מגדירה למעשה VIEW זמני שקיים רק עד אחרי שמתשאלים אותו פעם אחת ואז נעלם
                      תכונה ייחודית שלו היא שאפשר לקרוא ל VIEW מתוך עצמו מה שלמעשה הופך אותו לבעל יכולת רקורסיבית
                      מעבר לכך הכל פועל כמו שאילתה רגילה
                      בשורה הראשונה אתה למעשה בוחר את השורה הראשונה שלך ואז ב UNION מחבר אליה את הבאות בתור
                      לפי הלוגיקה שלך לדוגמה אם בחרת יום מסוים תרצה לחבר אליו את היום הבא או הקודם וכו'
                      דבר נוסף שצריך לשים לב לשים TERMINATOR כמו בכל רקורסיה, אחרת ב 100 הוא עף או שמגדירים MAX RECURSION גדול יותר מ100
                      במקרה של הדוגמה שהובאה >5 זה הטרמינייטור

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

                      לדוגמה אם יש טבלת עובדים ויש ID לכל עובד ועמודה שמכילה את ה ID של המנהל של אותו עובד וגם למנהל יש מנהל ולמעלה בקודש וכו'
                      לבנות מזה עץ ייראה בערך ככה : (אני ממליץ למי שרוצה להבין ליצור ממש טבלה ולנסות את השאילתה)

                      WITH cte (ID,MID,path) AS
                      (
                      SELECT [EmployeeID],[ManagerID], CAST([First Name] + ' ' + [Last Name] AS NVARCHAR(MAX))
                      FROM Employees WHERE [ManagerID] IS NULL
                      
                      UNION ALL
                      
                      SELECT [EmployeeID],[ManagerID],
                      CAST(path + '\' + [First Name] + ' ' + [Last Name] AS NVARCHAR(MAX))
                      FROM Employees INNER JOIN cte ON ID = [ManagerID]
                      )
                      
                      SELECT * FROM cte
                      

                      הקוד הזה בוחר את הבוס כשורה ראשונה ואז בריקורסיה יורד בעץ הארגוני עד שלעובד אין יותר JOIN לכפופים לו
                      מקווה עזרתי ולא בלבלתי . . .

                      פורסם במקור בפורום CODE613 ב30/07/2014 23:17 (+03:00)

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

                        עזרת, אבל מה עם mysql...

                        פורסם במקור בפורום CODE613 ב30/07/2014 23:28 (+03:00)

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

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

                          @ארכיטקט

                          עזרת, אבל מה עם mysql...

                          כבר אמרו חז"ל: למד לשונך לומר איני יודע . . .

                          פורסם במקור בפורום CODE613 ב31/07/2014 00:04 (+03:00)

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

                            הנה היום יצא לי להשתמש בזה שוב, והפעם כשאני צריך לקבל רשימה של ערכים שנמצאים בין שני שדות, כלומר יש לי טבלה שמכילה שדה משנה, ושדה עד שנה, כשאני צריך לקבל רשימה של כל השנים אני משתמש בקוד הנפלא הזה:

                            with cte as
                            (select c.FromYear  i,ID, ToYear from CaseHandlingDates c
                             union all
                             select * from (select i+1 i,ID,ToYear from cte ) as c  where  c.i  <= c.ToYear)
                             select i , ID , ToYear  from cte order by ID
                            

                            פורסם במקור בפורום CODE613 ב22/10/2014 12:33 (+03:00)

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

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

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

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

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