עזרה בשאילתת SQL

danymaor

New member
עזרה בשאילתת SQL

אני עובד עם SQL SERVER 2008 ויש לי בעייה שאני בכלל לא יודע אם אפשר לעשות את זה.

את השאילתה אני רושם כך:

SELECT VideoTitle FROM AllMovies WHERE VideoName LIKE '%Harry.Potter%'


וזה מחזיר לי את :

Harry.Potter 1
Harry.Potter 2
Harry.Potter 3
Harry.Potter 4

עד כאן הכל טוב


אני רוצה שזה יהיה הפוך כלומר לשלוח עליו Harry.Potter 4 או Harry.Potter 3 ולקבל בחזרה Harry.Potter.
אני גם רוצה להצליח לשלוח אליו Harry.Potter 5 שלא קיים בבסיס הנתונים ולקבל בחזרה Harry.Potter כלומר לקחת את הסטרינג שלי ולבדוק האם הנתונים בבסיס הנתונים "מתלבשים" על הסטרינג שלי ואם כן אז להחזיר את הערך Harry.Potter

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

sinaiy

New member
זה לא מוגדר טוב.

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

danymaor

New member
אני מנסה כבר כמה ימים ולא מצליח....

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

אני ייתן עוד דוגמה כי אני מבין שמשהו בהסבר שלי לא כל כך טוב.

1. יש לי את המחרוזת "דני הולך לטיול בכל בוקר ובכל ערב"

2. בבסיס הנתונים יש לי הערכים האילו:

א. "דני הולך לטיול"
ב. "משה הולך לטיול"
ג. "ירון הולך לטיול"

כמו שאתה רואה אני שלחתי "דני הולך לטיול בכל בוקר ובכל ערב" ובבסיס הנתונים יש "דני הולך לטיול" ומה שאני רוצה לקבל בחזרה זה רק ערך אחד שהוא אפשרות א' "דני הולך לטיול"

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

מקווה שזה היה בור כי אני ממש זקוק לעזרה. אני משתגע עם זה כבר כמה ימים
 

pitoach

New member
תבדוק את התשובה שגרי שם לך ב MSDN

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

danymaor

New member
אחרי כמה ימים של כאב ראש מצאתי משהו משונה שאו

אחרי כמה ימים של כאב ראש מצאתי משהו משונה שאולי קשור לבעייה שלי.

אני חושב שניסית מה ש"גרי רשף" כתב לי כאן אולי 100 פעם בכל וריאציה אפשרית:

SELECT VideoTitle FROM AllMovies WHERE 'Harry.Potter'
LIKE '%'+VideoName+'%';


וזה לא עבד לי. אחרי שכבר נשברתי פתחתי בסיס נתונים חדש עם אותם הטבלאות ועם אותם הנתונים וניגשתי עם אותה השאילתה ועכשיו זה כן עובד ואפילו מצויין אבל בסיס הנתונים הראשון (שלא עובד לי עם השאילתה) נמצא בחברת אירוח אתרים (בתשלום ואיכותי) ושם זה לא עובד ושהתקנתי SQL SERVER על המחשב בבית זה כן עובד לי.
ויש משהו משונה שאני מגדיר בבסיס הנתונים בחברת האירוח לדוגמה
nchar(100)

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

יש למישהו רעיון? בחברת האירוח אמרו שהם לא יודעים.
 

pitoach

New member
ברגע שראיתי את ה DDL ששמת היה ברור הבעיה!

ברגע שראיתי את ה DDL ששמת היה ברור הבעיה!

זה מה שקורה כשנותנים לנו לנחש

***** תמיד תמיד תמיד תמיד כשאתה שואל שאלה ואתה רוצה תשובה מתאימה למה שיש לך תצרף לדאלה DDL+DML

עתה נחזור לבעיה: אני מציע לך לקרוא מעט על ההבדל בין varchar לבין char. אתה בחרת סוג של טור שבברור אינו מתאים לך

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


באותו היזדמנות כדאי לקרוא על טור מסוג NVARCHAR שאני בטוח שזה מה שאתה צריך ולא VARCHAR ובטח ובטח ובטח ובטח שלא CHAR של 100 תווים


לסיכום: שלב ראשון תעבור לשימוש בטור מסוג מתאים. שלב שני השאילתה של גרי תעבוד לך תמיד

מקווה שזה יעזור
 

pitoach

New member
כתבתי לך ב MSDN עוד כמה נקודות חשובות

לא כל מה שנכתב לך שם היה מדוייק
 

pitoach

New member
אל תשכח לסגור שם את הקריאה


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

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

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