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

25/05/2011

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

שייך לקטגוריה: 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 של התגובות על הרשומה הזו טרקבאק קישור

כתיבת תגובה

Fill in your details below or click an icon to log in:

WordPress.com Logo

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

Twitter picture

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

Facebook photo

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

Connecting to %s

ערכת עיצוב: Shocking Blue Green. בלוג בוורדפרס.קום.

Follow

Get every new post delivered to your Inbox.

הצטרפו אל 25 שכבר עוקבים אחריו