none
המרת תאריך לשבוע עבודה

    Question

  • איך אני יכולה להמיר תאריך מהצורה dd/mm/yyyy לשבוע עבודה ושנה מהצורה הבא: yyyyww ?
    Monday, June 25, 2012 7:51 AM

Answers

  • קודם את צריכה להפוך את התאריך למשתנה מסוג תאריך אני יוצא מתוך הנחה  שהוא VARCHAR. אם הוא מראש DATETIME אז תדלגי על ה CONVERT

    http://www.sqlusa.com/bestpractices/datetimeconversion/

    SELECT convert(datetime, '23/10/2016', 103)

    אח"כ להשתמש ב DATE PART

    בשביל להוציא את השנה והשבוע

    http://msdn.microsoft.com/en-us/library/ms174420.aspx

    SELECT convert (varchar,DATEPART(yyyy,getdate())) + convert (varchar,DATEPART(dw,getdate()) )

    • Edited by tetitu Monday, June 25, 2012 9:06 AM
    • Marked as answer by אנה Monday, June 25, 2012 1:33 PM
    Monday, June 25, 2012 9:02 AM
  • כמה נקודות :-)

    1. בפתרון כזה אתה לא מכסה מקרה של מספר עם ספרה אחת. למשל אם תריץ את השאילתה היום תקבל:

    20122

    ואני מניח שאנא רוצה לקבל 201202

    2. אני חושב שהיא רוצה לקבל מספר שבוע בשנה ולא יום בשבוע ז"א במקום dw צריך להישתמש ב WW

    SELECT convert (varchar,DATEPART(yyyy,getdate())) + convert (varchar,DATEPART(WW,getdate()))
    3. בשרת SQL בגרסה 2012 יש פונקציה בשם FORMAT שנועדה בדיוק לזה. מכיוון שהיא מובנית על CLR דווקא WW לא נמצאת שם דרך אגב :-) אבל את זה קל לפתור

    http://msdn.microsoft.com/en-us/library/hh213505.aspx

    4. אם כמו שאתה מעריך מדובר במקור בשרשת כמו NVARCHAR אז למה להפוך לתאריך ולהחזיר שוב לשרשרת? למה לא לעבוד ישירות על השרשרת (רק בחישוב של ה WW צריך חישוב מתמטי פשוט עם המרה)?

    declare @T as nvarchar(10) = '27/02/2013' -- יום הולדתהבא שלי! אני מצפה למתנות
    select RIGHT(@T,4) -- נותן את החלק הראשון


    signature


    • Edited by pituachEditor Monday, June 25, 2012 1:04 PM
    • Marked as answer by אנה Monday, June 25, 2012 1:33 PM
    Monday, June 25, 2012 11:58 AM

All replies

  • קודם את צריכה להפוך את התאריך למשתנה מסוג תאריך אני יוצא מתוך הנחה  שהוא VARCHAR. אם הוא מראש DATETIME אז תדלגי על ה CONVERT

    http://www.sqlusa.com/bestpractices/datetimeconversion/

    SELECT convert(datetime, '23/10/2016', 103)

    אח"כ להשתמש ב DATE PART

    בשביל להוציא את השנה והשבוע

    http://msdn.microsoft.com/en-us/library/ms174420.aspx

    SELECT convert (varchar,DATEPART(yyyy,getdate())) + convert (varchar,DATEPART(dw,getdate()) )

    • Edited by tetitu Monday, June 25, 2012 9:06 AM
    • Marked as answer by אנה Monday, June 25, 2012 1:33 PM
    Monday, June 25, 2012 9:02 AM
  • כמה נקודות :-)

    1. בפתרון כזה אתה לא מכסה מקרה של מספר עם ספרה אחת. למשל אם תריץ את השאילתה היום תקבל:

    20122

    ואני מניח שאנא רוצה לקבל 201202

    2. אני חושב שהיא רוצה לקבל מספר שבוע בשנה ולא יום בשבוע ז"א במקום dw צריך להישתמש ב WW

    SELECT convert (varchar,DATEPART(yyyy,getdate())) + convert (varchar,DATEPART(WW,getdate()))
    3. בשרת SQL בגרסה 2012 יש פונקציה בשם FORMAT שנועדה בדיוק לזה. מכיוון שהיא מובנית על CLR דווקא WW לא נמצאת שם דרך אגב :-) אבל את זה קל לפתור

    http://msdn.microsoft.com/en-us/library/hh213505.aspx

    4. אם כמו שאתה מעריך מדובר במקור בשרשת כמו NVARCHAR אז למה להפוך לתאריך ולהחזיר שוב לשרשרת? למה לא לעבוד ישירות על השרשרת (רק בחישוב של ה WW צריך חישוב מתמטי פשוט עם המרה)?

    declare @T as nvarchar(10) = '27/02/2013' -- יום הולדתהבא שלי! אני מצפה למתנות
    select RIGHT(@T,4) -- נותן את החלק הראשון


    signature


    • Edited by pituachEditor Monday, June 25, 2012 1:04 PM
    • Marked as answer by אנה Monday, June 25, 2012 1:33 PM
    Monday, June 25, 2012 11:58 AM
  • תודה רבה!
    Monday, June 25, 2012 1:33 PM
  • היי פיתוח.

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

    1. אתה צודק רק במקרה ואתה צריך את זה לצרכי מיון.

    אבל אם מדובר בשמירה של הנתונים ושליפה אח"כ זה כבר לא נכון מכיוון שאתה מוסיף פונקציה של FORMAT או כל פתרון אחר מיותר.

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

    3. וואלה, קראתי על זה אבל לא הפנמתי שאפו.

    4. בכל מקרה צריך לעשות המרה של המספרים של החודש והיום לשדה מספרי ואז לחשב נראה לי יותר קל CONVERT וזהו :)

    Tuesday, June 26, 2012 3:56 PM