הבלוג של גרי רשף

25/05/2011

הפיכת נוסחה (מחרוזת טקסט) לערך מספרי

Filed under: Uncategorized — תגיות: , , — גרי רשף @ 21:00

נניח שאנחנו קולטים נתונים ממסך בו צריך להזין ערך מספרי, אך לעיתים נכתבת שם נוסחה. למשל- מישהו כותב 2011-1960 במקום את גילו (51), או אולי 120*1.165 כדי לציין ערך כולל מע"מ וכו'; ואת הערך הזה יש לתרגם לערך מספרי.
מתימטית זו אינה בעייה קשה במיוחד, אבל אם יש לנו משתנה טקסטואלי שתוכנו הוא חישובי, כיצד נחלץ ממנו את התוצאה למשתנה אחר?

אפשר להשתמש למשל בפרוצדורה SP_ExecuteSQL שמאפשרת להריץ קוד דינאמי, ואת התוצאה להפנות למשתנה (הבעייה כאן היא לחלץ את מה שרץ בחלק הדינאמי אל מחוץ לחלק הדינאמי – פעולה שאינה ברורה מאליה):

Declare @S NVarchar(Max);
Set @S=N'2011-1960';

Declare @N Float;
Set @S=N'Select @N='+@S;
Exec SP_ExecuteSQL @Query=@S,
                   @Params=N'@N Float Output',
                   @N=@N Output;

Print @N;

clip_image002

מה קורה אם מדובר בטבלה בה יש עמודת טקסט עם חישובים?

ניצור לדוגמה טבלה זמנית עם שתי שורות כאלו:

Create Table #T(ID Int Identity,
                S Varchar(Max));

Insert
Into #T
Select '6/2*3'
Union All
Select '1+1';

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

Declare @S Varchar(Max);
Select @S=Isnull(@S+Char(13)+'Union All'+Char(13),'')
        +'Select'+Char(9)+Cast(ID As Varchar)+' ID,'
        +Char(13)+Char(9)+Char(9)+''''+S+''' S,'
        +Char(13)+Char(9)+Char(9)+S+' N'
From #T;

Print @S;
Exec(@S);

clip_image004

מודעות פרסומת

להגיב »

עדיין אין תגובות.

RSS feed for comments on this post. TrackBack URI

להשאיר תגובה

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

הלוגו של WordPress.com

אתה מגיב באמצעות חשבון WordPress.com שלך. לצאת מהמערכת / לשנות )

תמונת Twitter

אתה מגיב באמצעות חשבון Twitter שלך. לצאת מהמערכת / לשנות )

תמונת Facebook

אתה מגיב באמצעות חשבון Facebook שלך. לצאת מהמערכת / לשנות )

תמונת גוגל פלוס

אתה מגיב באמצעות חשבון Google+ שלך. לצאת מהמערכת / לשנות )

מתחבר ל-%s

יצירה של אתר חינמי או בלוג ב־WordPress.com.

%d בלוגרים אהבו את זה: