none
הפיכת מחרוזת המכילה אותיות ומספרים RRS feed

  • שאלה

  • שלום לכולם

    אנו משתמשים ב- SQL Server's Stored procedures כדי לשלוף (וגם לכתוב) נתונים מ-DB2/400 המחובר כ-Linked Server

    ל-SQL Server 2008.

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

    לדוגמא: Select Reverse(Address) from Linked_DB2.Production.BaseData.Customerf

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

    במקרים כאלו הטקסט העברי מטופל כהלכה אלא שהמספרים מתהפכים (כנראה שבמקור העברית נשלפת הפוך אך המספרים נשלפים ישר)

    לדוגמא:

    מחרוזת המקור ב-DB2:

    "מחרוזת נסיון 123 עם מספרים"

    המחרוזת המתקבלת ב-(Select Reverse(String :

    "מחרוזת נסיון 321 עם מספרים"

    ז"א המספר 123 התקבל כ-321

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

    תודה

    גד

    • שינה את הסוג Eran Sharvit יום שלישי 22 אוקטובר 2013 08:21
    • שינה את הסוג Eran Sharvit יום שלישי 22 אוקטובר 2013 08:45
    יום חמישי 03 אוקטובר 2013 11:09

תשובות

כל התגובות

    • הוצע כתשובה על-ידי pituachMVP, Moderator יום שלישי 22 אוקטובר 2013 09:03
    • סומן כתשובה על-ידי Eran Sharvit יום רביעי 23 אוקטובר 2013 08:51
    יום חמישי 03 אוקטובר 2013 11:40
    מנחה דיון
  • בעצם... עברתי כרגע על הקוד של הקישור ששמתי למעלה בצורה מהירה (בלי לבדוק אם הוא עובד אלא רק במבט חטוף) והוא ניראה מאוד לא יעיל (כולל הרבה פעולות PARSING של טקסט). אני ממליץ לך לכתוב פונקציה קטנה של CLR שמבצעת את הפעולה בצורה יעילה ומהירה. אני צופה הבדלים במיטוב בצורה ניכרת מאוד!

    סתם להבנה כמה CLR יכול למטב פעולות PARING כדאי לבדוק את הקישור הבא (דוגמה של פונקציית SPLIT):
    http://www.sqlperformance.com/2012/07/t-sql-queries/split-strings


    [Personal Site] [Blog] [Facebook]signature

    יום חמישי 03 אוקטובר 2013 11:47
    מנחה דיון
  • בתור האחראי על הקוד הנ"ל: כתבתי אותו מזמן אבל אני מניח ריאלית שניתן לשפר אותו,
    אם כי מוסכם על כולנו שבכל הנוגע לעיבוד של מחרוזות - קוד CLR הוא יותר יעיל.

    יחד עם זאת: לא לכולם יש מספיק ידע בכתיבת קוד CLR (מתבייש להתוודות שזה כולל אותי), לתחזק אותו וכו'.
    יתכן שעדיף לפעמים משהו זמין, גם אם משלמים על זה מחיר לא משמעותי ביעילות של הקוד.

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


    El castellano no es mi lengua materna. Discúlpenme por los errores gramaticales, y, si pueden, corríjanme en los comentarios, o por correo electrónico. ¡Muchas gracias! Blog: http://about.me/GeriReshef

    יום שני 07 אוקטובר 2013 04:28
  • אני מסכים איתך לחלוטין גרי

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

    עם זה, מה שאני עושה זה במקרים בהם ההבדל קיצוני והשאלה שנשאלה היא לא לימודית/תיאורטית אלא מעשית אז הנטייה להמליץ על הפתרון המיטבי ולא הפתרון ש"רק עובד". בנוסף לכך בכל מאמר כזה אני מקפיד להזכיר אם לא 20 פעמים אז לפחות פעם אחת, את הנושא של המיטוב והעדיפות בשימוש בדרכים אחרות (שחורגות ממסגרת המאמר אם הוא מאמר שדן בפתרון TSQL טהור). דוגמה טובה לכך אפשר לראות באחד המאמרים האחרונים שלי שדן במפורש בפתרון TSQ טהור:
    Using Bulk Insert to import inconsistent data format using pure T-SQL
    כאמור מטרת המאמר היה לתת פתרון TSQL ולא לתת פתרון מיטבי כלשהו (המאמר נכתב בעקבות טענה חוזרת ונשנית שאין אפשרות לבצע את זה ב TSQL, טענה שנשמעה בכמה מאנשי המקצוע הטובים יותר כולל מנהלים בפורומים של MSDN העולמי), לכן הפתרון שאני מציג הוא פתרון TSQL טהור, ותוך כדי הכתיבה יש מספיק תזכורת לגבי הנושא בנקודות שונות במאמר.

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

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


    [Personal Site] [Blog] [Facebook]signature

    יום שני 07 אוקטובר 2013 06:07
    מנחה דיון
  • נשמח לשמוע אם אחת מן התשובות כאן עזרה והבעיה נפתרה


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

    יום שני 07 אוקטובר 2013 12:05
  • הקוד שהוצע

    בלינק הראשון

    http://blogs.microsoft.co.il/blogs/gerireshef/archive/2011/06/20/GR20110620.aspx
    --------------------------------------------------------------------------------

    לא פתר את הבעיה

    גד

    יום רביעי 09 אוקטובר 2013 10:00
  • אהלן גד

    אתה יכול  לצרף לנו DDL+DML כדי שנוכל לעבוד על דגימה של נתונים מתאימה לנתונים שלך ולפי המבנה של האלמנטים שלך. כמו כך ציין שאילתת SELECT שאתה עושה בה שימוש ומחזירה את הטעות וציין את התוצאות המצופות בבקשה כדי שנבין בדיוק מה אתה רוצה לקבל.


    [Personal Site] [Blog] [Facebook]signature

    יום רביעי 09 אוקטובר 2013 13:33
    מנחה דיון
  • הי גד,

    אתה עדיין איתנו?

    האם תוכל לספק דוגמא, כפי שרונן ביקש?

    תודה!

    -----------------------------
    גיא גלנצר
    יועץ ומדריך SQL Server
    Madeira - SQL Server Services
    http://www.madeira.co.il

    יום חמישי 17 אוקטובר 2013 03:31
    מנחה דיון
  • הי.

    כיוון שלא נראה באופק פתרון והשואל המקורי לא הגיב, אני כרגע משנה את סוג האשכול ל"דיון".

    במידה והמצב ישתנה, נחזיר את האשכול לסוג "שאלה".

    תודה לכל המסייעים!

    צוות הפורומים.


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

    יום שלישי 22 אוקטובר 2013 08:20
  • ערן, גם אם השואל המקורי לא יגיע, הרי שעדיין התקבלו תשובות (נכונות).

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

    דוגמה מהחיים להבהרה: אם מישהו שואל כמה זה 1+1 אני אסכים לענות לו 2 מתוך הנחה שהוא תלמיד בכיתה א, אבל אם זה דיון של מתמטיקאים (כן זה נושא לדיון אמיתי ולמעשה אחת משלושת האקסיומת היסודיות של המתמטיקה), אז למרות שאישית למדתי את הדברים הרי שלא הייתי לוקח בו חלק, ועל אחת כמה וכמה מי שלא מבין בתורת הקבוצות לא היה יכול לקחת בו חלק, גם אם הוא יודע ברמת כיתה א שמתקיים 1+1=2. יש הבדל מהותי בין דיון לבין שאלה!

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


    [Personal Site] [Blog] [Facebook]signature

    יום שלישי 22 אוקטובר 2013 08:41
    מנחה דיון
  • אז הפתרון לכך הוא להשתמש באופציית "הצע כתשובה".

    ברגע שמומחי הקהילה מסמנים לי את התשובות המומלצות (כולל התשובה שלכם אם אתם חושבים שהיא הנכונה), יהיה לי יותר קל לסמן את הפתרון.

    כרגע החזרתי את האשכול לסוג "שאלה" על מנת שנוכל ליישם זאת.

    תודה!


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

    יום שלישי 22 אוקטובר 2013 08:45
  • אז הפתרון לכך הוא להשתמש באופציית "הצע כתשובה".

    ברגע שמומחי הקהילה מסמנים לי את התשובות המומלצות (כולל התשובה שלכם אם אתם חושבים שהיא הנכונה), יהיה לי יותר קל לסמן את הפתרון.

    כרגע החזרתי את האשכול לסוג "שאלה" על מנת שנוכל ליישם זאת.

    תודה!


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

    אני מסכים בהחלט :-)

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


    [Personal Site] [Blog] [Facebook]signature

    יום שלישי 22 אוקטובר 2013 09:02
    מנחה דיון