none
= like vs RRS feed

  • שאלה

  •  שלום  לעוזרים,

    יש לי שאלת הגיון מדוע שאני מריץ את זה select * from Data_TeleReport where DateTimeOfAction = '2010-10-28

    חוזרות תוצאות  תקינות ושאני מריץ את זה :

    'select * from Data_TeleReport where DateTimeOfAction like  '2010-10-28

     לא חוזרות תוצאות השדה הוא מסוג datetime .

     אם נמקד את השאלה מדוע ב like  לא חוזרות תוצאות על שדה מסוג datetime?

    תודה רבה מראש

    יום שני 15 נובמבר 2010 10:29

כל התגובות

  • אהלן,

    שאלה יפה ... התשובה נמצאת ב- Execution Plan. עם תריץ את השאילתה עם Set SHOW_PLAN_TEXT ON תראה שמתבצעת המרה של שדה ה- Datetime ל- nvarchar ולכן לא חוזרות תשובות.

    במידה ותתשאל like - Oct 28 2010% התשובות יחזרו ברינה ובגיל, מכוון שזה הייצוג לאחר Implict Convertion על העמודה. 

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

     

    יום טוב וצירפתי דוגמא

    create table dbo.test (cola datetime)
    Insert dbo.test Values ('2010-01-01') 
    Go
    
    SET SHOWPLAN_TEXT ON
    Go
    
    Select * from dbo.test Where cola like '2010-01-01'
    
    Eexcution Plan
    --------------------------
    
     |--Table Scan(OBJECT:([BBB].[dbo].[test]), WHERE:(CONVERT_IMPLICIT(varchar(40),[BBB].[dbo].[test].[cola],0) like '2010-01-01'))
    יום שני 15 נובמבר 2010 11:13
  • אין סומכים על הנס:

    Set Language Español;
    Select	Cast(Cast('20100128' As DateTime) As NVarChar);
    

    בספרדית- ינואר הוא Enero ולא Januar, ולכן נקבל Ene ולא Jan.

    עם אוקטובר לא צפויה בעייה מכיוון שבכל השפות היא מתחילה ב-Oct.

    בקיצור- הפלט הוא תלוי שפה,

    והיה רצוי לדעת מה הבעייה כדי לפתור אותה באופן מתימטי ולא על ידי טיפול במחרוזות.

    למשל- כדי לבדוק אם תאריך חל באוקטובר לא בודקים אם הוא '%Like '%Oct..


    Geri Reshef http://gerireshef.wordpress.com
    יום שני 15 נובמבר 2010 11:51
  • הי,

    הדוגמא היתה להמחשה בלבד!!!! התשובה נמצאת ב- Query Plan ועל זה צריך לשים את תשומת הלב.

    בכל מקרה אין להתייחס לתאריכים כמחרוזת ורצוי לבצע את השאילתא על nattive data types היינו מחרוזות כמחרוזות ותאריכים כתאריכים ומספרים כמספרים.

    במידה ונערבב אלו באלו יתחילו לעלות גם שאלות של ביצועיים במקביל לנכונות הנתונים

     

    יום טוב 

    יום שני 15 נובמבר 2010 12:05