אינדקס מאמרי SQL

איך לבצע replace בתוך שאילתא

 

איך לבצע replace בתוך שאילתא

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

הנה טבלת מידע לדוגמא, לטבלה קוראים mytable וכך היא נראת:

idnameage
1Yaron23
2webmasters.co.il test11
3Shiran5
4webmasters.co.il test53
5webmasters.co.il test3

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

אפשר לבצע update רגיל אבל אז כל המידע בתוך הרשומות שמספרן 2,4,5 תחת השדה name ימחקו. זאת אומרת שגם המידע "test" ליד הדומיין ימחק. ואנחנו רוצים להשאיר את שאר ה-path (השביל) של הדומיין אלא רק לשנות את הדומיין הספציפי עצמו.

קודם כל אמצא את מה שאני רוצה לבצע עליו החלפה, למשל אני רוצה להחליף את ה-URL הבא:
webmasters.co.il 
אל
google.co.il

וכדי לוודא אילו רשומות יושפעו מהמהלך שלנו אני אבצע שאילתת SELECT כזו:

SELECT * FROM mytable
WHERE  name LIKE '%webmasters.co.il%'

על פי השאילתא הזו יש לנו 3 תוצאות בטבלה שיושפעו כאשר נבצע את ה-replace בתוך שאילתת ה-UPDATE. שימו לב גם שאנו משתמשים כאן ב-like (שעליה אפשר לקרא במדריך הזה) ואלו יהיו התוצאות שבעצם יושפעו מהשאילתא הבאה שלנו.

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

כך תיראה השאילתא עם ה-replace:
UPDATE mytable SET name = replace(name, 'webmasters.co.il', 'google.co.il') WHERE name LIKE '%webmasters.co.il%'

השאילתא הזו זהה לשאילתת update (שכבר כתבנו עליה מדריך) החלק השונה מתחיל אחרי set name = ואז באה הפונקציה שתבצע את החילוף.

לפונקציה 3 הגדרות:
- הראשונה היא name שזה שם השדה שבו יתבצע החילוף
- השני הוא המידע שאנו רוצים להחליף במקרה הזה webmasters.co.il
- השלישי הוא המידע שאנחנו רוצים להזין במקום המידע הקודם במקרה הזה google.co.il

כך תיראה הטבלה לאחר ביצוע השאילתא:


idnameage
1Yaron23
2google.co.il test11
3Shiran5
4google .co.il test53
5google .co.il test3

שימו לב שרק הדומיין webmasters.co.il השתנה, שום דבר אחר לא השתנה! וזה מה שרצינו לבצע.

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

http://www.webmasters.co.il/view-guides/sql/
http://www.webmasters.co.il/view-page/1.html


וכל הכתובות הללו נמצאות במסד נתונים, ולמשל עברנו לדומיין אחר לדוגמא אל google.co.il אז בעזרת השאילתא שלנו הכתובות ישתנו אל:

http://www.google.co.il/view-guides/sql/
http://www.google.co.il/view-page/1.html

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



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