This is a mirror of official site: http://jasper-net.blogspot.com/

הסרת תווים מיותרים

| Wednesday, August 24, 2011
יש לנו טקסט אותו אנחנו רוצים לנקות מתווים מיותרים כמו #\|&^ וכו' או להשאיר רק תווים אלפה-נומריים.

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

Declare @S Varchar(Max);

--"מחרוזת טכנית לדוגמה שכוללת הרבה "לכלוך

Select  @S='abc d1,$ 23A-B`CD''א]ב%ג[דה';

Select  @S=Replace(@S,' ',''), --רווח

        @S=Replace(@S,',',''),

        @S=Replace(@S,'$',''),

        @S=Replace(@S,' ',''), --{TAB}

        @S=Replace(@S,'-',''),

        @S=Replace(@S,'`',''),

        @S=Replace(@S,'''',''), --גרש יש להכפיל

        @S=Replace(@S,']',''),

        @S=Replace(@S,'%',''),

        @S=Replace(@S,'[','');

Select @S;


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

Declare @S Varchar(Max),

        @No Varchar(Max);

Select  @S='abc d1,$ 23A-B`CD''à]á%â[ãä', --"מחרוזת טכנית לדוגמה שכוללת הרבה "לכלוך

        @No='-` ~!@#$%^&*()_=+{},<.>/[?{}\|;:'']';

While @No<>''

    Select  @S=Replace(@S,Left(@No,1),''),

            @No=Stuff(@No,1,1,'');

Select @S;

Read more: גרי רשף
QR: GR20110823.aspx

Posted via email from Jasper-net

0 comments: