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

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

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

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

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

    שלום לכולם

    יש לי 2 מספרים נתונים לדוגמא 100 ו 300, הם נמצאים בשני שדות, אני צריך לקבל את כל הטווח הזה בשאילתה שורה אחרי שורה (מספרים זה יותר קל לדעתי, המטרה הסופית היא תאריכים).
    בדוגמא הנ"ל אני אמור לקבל 201 שורות לדוגמא:
    100
    101
    102
    ...
    300
    באקסס מה שעשינו עד היום זה לצרף טבלה נוספת שמכילה את כל המספרים, ולהתנות את ההצגה בטווח המספרים.

    מה שאני בטוח כמעט 100 אחוז בתחושות בטן, שיש יכולת ב SQL אמיתי, ז"א sql server או mysql לעשות את זה נקי נקי בלי טבלה נוספת ובלי שאר ירקות.

    ראיתי קצת באינטרנט רעיונות לא טובים מי יודע מה, אחד מהם משתמש בטבלאות המערכת, כאשר הוא מניח שיש בהם למעלה מ 1000 שורות, זה לא מתאים הקומבינות הללו.

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

    אשמח לשמוע רעיונות טהורים יותר אם יש למישהו.

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

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

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

      אם הבנתי אותך נכון משהו כזה אמור לעזור לך:

      SELECT *
      FROM  TABLE_NAME
      WHERE (ID >= 100) AND (ID <= 300)
      

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

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

        @רחמים

        אם הבנתי אותך נכון משהו כזה אמור לעזור לך:

        SELECT *
        FROM  TABLE_NAME
        WHERE (ID >= 100) AND (ID <= 300)
        

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

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

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

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

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

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

          תגובה 1 תגובה אחרונה
          0
          • א מנותק
            א מנותק
            ארכיטקט
            כתב ב נערך לאחרונה על ידי
            #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
                                    • דף הבית
                                    • קטגוריות
                                    • פוסטים אחרונים
                                    • משתמשים
                                    • חיפוש
                                    • חוקי הפורום