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

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

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. בדיקה על חודש איזה אירועים קיימים בו

בדיקה על חודש איזה אירועים קיימים בו

מתוזמן נעוץ נעול הועבר תכנות
6 פוסטים 3 כותבים 236 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • צבי-שצ מחובר
    צבי-שצ מחובר
    צבי-ש
    כתב ב נערך לאחרונה על ידי צבי-ש
    #1

    יש לי טבלת אירועים מתמשכים למשל פסח מתאריך a עד תאריך b או שבועות מתאריך c עד תאריך d עם התיאור שלהם

    אני עובד בשפת פייתון
    עם sqlalchemy

    זה המבנה של הsqlite שלי

    
    class Event(BaseTable):
        __tablename__ = 'events'
        id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True)
        start_date: Mapped[datetime.datetime]
        end_date: Mapped[datetime.datetime]
        description: Mapped[Optional[str]]
    

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

    def test(your: int, month: int)->list :
        #בדיקה מתי בדיוק חל שבועות ובאיזה תאריך לועזי זה יוצא
        return[26,27]
    
    test(2023,5)
    

    איך אני יכול ליצור שאילתא כזאת?
    הבעיות שלי הם

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

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

    3. חשבתי פשוט לשמור בשדה במסד נתונים את החודשים שהוא מופיע אבל זה נראה לי ממש לא הדרך הנכונה.

    4. כאן מצאתי משהו דומה https://stackoverflow.com/questions/8895208/sqlalchemy-how-to-filter-date-field אך הבעיה ששם הוא מנסה לבדוק על שדה מסויים האם הוא בטווח התאריכים , אני מחפש טווח בתוך טווח כאשר אני צריך לקבל חלק מהטווח במקרה שהוא מתנגש עם תחילת החודש.

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

    כיף לגלות דברים חדשים.
    חוק ה-50-50-90: בכל פעם שיש סיכוי של 50-50 שמשהו יעבוד, יש סיכוי של 90 אחוז שהוא לא. מקור

    yossizY תגובה 1 תגובה אחרונה
    0
    • yossizY מנותק
      yossizY מנותק
      yossiz
      השיב לצבי-ש ב נערך לאחרונה על ידי yossiz
      #2

      סתם טיפ (אולי כבר עמדת על זה), כדי לענות על השאלה צריך לפצל את השאלה לשני חלקים:
      א) מה השאילתא הנכונה
      ב) איך לתרגם את זה ל-sqlalchemy

      בחיפוש אחרי תשובה לשאלה הראשונה אתה לא אמור לכתוב את המילה sqlalchemy כלל בחיפוש
      רק אחרי התשובה לשאלה הראשונה, אם יש עדיין שאלה איך לממש ב-sqlalchemy, אז ניתן לחפש על זה בנפרד

      ולעצם השאלה:
      בעצם צריך לחפש את האירועים שתאריך הסיום או תאריך ההתחלה נמצאים בתוך החודש הרצוי
      דהיינו (פסאודו קוד):

      WHERE (start_date BETWEEN תחילת_החודש AND סוף_החודש) OR (end_date BETWEEN תחילת_החודש AND סוף_החודש)
      

      https://www.sqlite.org/lang_expr.html#the_between_operator
      אני לא יודע אם יש תמיכה ב-sqlalchemy לאופרטור BETWEEN, אבל גם אם לא זה זהה לשילוב התנאים של לא פחות מ- ולא יותר מ-

      זה יתן לך רשימת אירועים שחופפים את החודש. איך תתרגם את זה לרשימת ימים? לכאורה כבר עדיף בקוד ולא ב-SQL. למה להסתבך...

      📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

      צבי-שצ תגובה 1 תגובה אחרונה
      4
      • צבי-שצ מחובר
        צבי-שצ מחובר
        צבי-ש
        השיב לyossiz ב נערך לאחרונה על ידי צבי-ש
        #3

        @yossiz כתב בבדיקה על חודש איזה אירועים קיימים בו:

        סתם טיפ (אולי כבר עמדת על זה), כדי לענות על השאלה צריך לפצל את השאלה לשני חלקים:
        א) מה השאילתא הנכונה
        ב) איך לתרגם את זה ל-sqlalchemy

        בחיפוש אחרי תשובה לשאלה הראשונה אתה לא אמור לכתוב את המילה sqlalchemy כלל בחיפוש
        רק אחרי התשובה לשאלה הראשונה, אם יש עדיין שאלה איך לממש ב-sqlalchemy, אז ניתן לחפש על זה בנפרד

        ולעצם השאלה:
        בעצם צריך לחפש את האירועים שתאריך הסיום או תאריך ההתחלה נמצאים בתוך החודש הרצוי
        דהיינו (פסאודו קוד):

        WHERE (start_date BETWEEN תחילת_החודש AND סוף_החודש) OR (end_date BETWEEN תחילת_החודש AND סוף_החודש)
        

        https://www.sqlite.org/lang_expr.html#the_between_operator
        אני לא יודע אם יש תמיכה ב-sqlalchemy לאופרטור BETWEEN, אבל גם אם לא זה זהה לשילוב התנאים של לא פחות מ- ולא יותר מ-

        זה יתן לך רשימת אירועים שחופפים את החודש. איך תתרגם את זה לרשימת ימים? לכאורה כבר עדיף בקוד ולא ב-SQL. למה להסתבך...

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

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

        הבעיה מסתבכת כשלמשל חודש 3-4-5 מלא באירוע אחד מתמשך, אני לא יקבל בחודש 4 שום מידע על אירוע, כיוון שהוא לא התחיל בחודש 4 ולא הסתיים בחודש 4

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

        שאילתא 1
        תחילת תור 1 גדול מתחילת תור קיים && סוף תור 1 קטן מסוף תור קיים
        שאילתא 2
        תחילת תור 1 גדול מתחילת תור קיים אבל קטן מסוף תור קיים
        שאילתא 3
        סוף תור 1 גדול מתחילת תור קיים אבל קטן מסוף תור קיים
        שאילתא 4
        תחילת תור 1 קטן מתחילת תור קיים && סוף תור 1 גדול מסוף תור קיים

        כיף לגלות דברים חדשים.
        חוק ה-50-50-90: בכל פעם שיש סיכוי של 50-50 שמשהו יעבוד, יש סיכוי של 90 אחוז שהוא לא. מקור

        yossizY תגובה 1 תגובה אחרונה
        2
        • yossizY מנותק
          yossizY מנותק
          yossiz
          השיב לצבי-ש ב נערך לאחרונה על ידי
          #4

          @צבי-ש כתב בבדיקה על חודש איזה אירועים קיימים בו:

          הבעיה מסתבכת כשלמשל חודש 3-4-5 מלא באירוע אחד מתמשך, אני לא יקבל בחודש 4 שום מידע על אירוע, כיוון שהוא לא התחיל בחודש 4 ולא הסתיים בחודש 4

          אכן לא חשבתי על זה

          אבל עכשיו שאני מתיישב שוב בדבר אני רואה שאפשר בתנאי פשוט:
          סוף האירוע אחרי תחילת החודש ותחילת האירוע לפני סוף החודש

          📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

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

            כיון שכבר כותבים טבלה, אני מציע לכתוב את כל הימים כולם.
            זה לא יוצא הרבה יותר שורות.

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

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

            צבי-שצ תגובה 1 תגובה אחרונה
            0
            • צבי-שצ מחובר
              צבי-שצ מחובר
              צבי-ש
              השיב לdovid ב נערך לאחרונה על ידי
              #6

              @dovid כתב בבדיקה על חודש איזה אירועים קיימים בו:

              כיון שכבר כותבים טבלה, אני מציע לכתוב את כל הימים כולם.
              זה לא יוצא הרבה יותר שורות.

              אני מעדיף לעשות את זה כן עם תאריך התחלה וסיום ולא טבלא עם ימים,

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

              כיף לגלות דברים חדשים.
              חוק ה-50-50-90: בכל פעם שיש סיכוי של 50-50 שמשהו יעבוד, יש סיכוי של 90 אחוז שהוא לא. מקור

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

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

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

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