חילוץ מתוך מספר

יעקב 199

New member
חילוץ מתוך מספר

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

תודה רבה מאד
 

pitoach

New member
פעולות על טקסט הן יקרות וחילוץ מתוך מספר

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

חילוץ תוו ממספר (או יותר נכון מספר במיקום מסויים) יול להעשות בצורה מתמטית פשוטה תוך שימוש ב Modulo+FLOOR. לדוגמה אם רוצים את ספרת המאות, אז לוקחים את מודולו של המספר מחולק ב 1000, ואת המודולו הזה מחלקים ל 100 ומבצעים FLOOR לתוצאה (עיגול כלפי מטה).
החלק הראשון מוריד את כל החלקים מעל סיפרת המאות ומחזיר רק את ה 3 תווים האחרונים. החלק השני מחזיר מתוך זה רק את ספרת המאה.
* הערה: פעולה זו נכונה בכל בסיס אבל הפונקציה מודולו המובנית מותאמת לעבודה בסיס 10. בצורה זו מחלצים ם מספרים בבסיסים שונים בעקרון.
דוגמה בשרת SQL:
select floor((53255354575677687%1000)/100)
 

משקיען10

New member
לא הכי קל לעשות left ו- right?

דוגמא

USE AdventureWorks2012;
GO
SELECT LEFT(Name, 5)
FROM Production.Product

GO
USE AdventureWorks2012;
GO
SELECT right(Name, 5)
FROM Production.Product

תחליף את ה- NAME בשם העמודה שלך ואת המספר במספר הנכון מתוך המחרוזת שלך וזהו.
 

pitoach

New member
קל זה לא תמיד טוב


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

הסיבה היא פשוטה, טקסט מאחורי הקלעים הוא למעשה אוסף של תווים (אוסף במובן התיכנותי.. כמו למשל array או sorted list). שרתי SQL לא עובדים טוב עם ניתוח טקסטים (Parsing), והם יותר מותאמים לעבודה עם אוספים של רשומות (records set).

אם חייבים לעבוד עם ניתוח של טקסט (אני לא מדבר על פעולה אחת אלא מתחילים כבר לבצע פעולה בתוך פעולה בתוך פעולה... למשל REPLACE על LEFT על SUBSTRING על LEFT נוסף...) אז התוצאה יכולה להיות ממש איומה. במקרים כאלה חייבים לעבוד על CLR ומקבלים מיטוב ענק במשאבים. אבל עדיין גם ב CLR בעבודה פעולות מתמטיות על מספרים נקבל תוצאה הרבה יותר טובה מהמרה לטקסט ואז ניתוח הטקסט.
 

גרי רשף

New member
הייתי אומר כך

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

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

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

משקיען10

New member
תודה לכולם, בזכות השאלה למדתי מה זה מודולו...

התייחסות אחרונה - הבחור אמר שהוא לא מקצוען וגם אני לא... לכן הצעתי פונקציות של LEFT&RIGHT
 
למעלה