הבלוג של גרי רשף

31/08/2011

חישוב אורך מחרוזת

Filed under: Uncategorized — גרי רשף @ 19:28

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

LEN (string_expression): Returns the number of characters of the specified string expression, excluding trailing blanks.

Note: To return the number of bytes used to represent an expression, use the DATALENGTH function.

ומה אומר ה-BOL על DataLength?

DATALENGTH (expression) : Returns the number of bytes used to represent any expression.

כמו בהרבה מקרים אחרים- יש לקרוא את האותיות הקטנות: Len סופר תווים (ללא רווחים מובילים ומסיימים)
ו-DataLength סופר Bytes.
ההבדל הוא שבסוגי נתונים כדוגמת Char או Varchar כל תו הוא Byte,
אולם ב-NChar או NVarchar כל תו הוא שני Bytes:

Select  Len('ABCD ') [Len_Varchar],
        DataLength('ABCD ') [DataLen_Varchar],
        Len(N'ABCD ') [Len_NVarchar],
        DataLength(N'ABCD ') [DataLen_NVarchar];

clip_image002

לפיכך יש לשים לב לשתי נקודות:

אין טעם להשתמש ב-NVarchar כשניתן להשתמש ב-Varchar: גם עולה יותר וגם יש לו תופעות לוואי לא נעימות.

אם אין ברירה ורוצים למצוא את אורך המחרוזת כולל הרווחים (ללא קשר לשאלה אם זה Unicode או לא)- אפשר להסתבך כך:

Declare @S NVarchar(Max);
Select  @S='ABCD ';
Select  Len('#'+@S+'#')-2 [Length];

clip_image004

לחילופין אפשר להמיר את כל הרווחים לתווים אחרים על ידי Replace או לבצע Cast ל-Varchar ואז להשתמש ב-DataLength ועוד.

למי שיש רעיון יותר פשוט – אשמח לשמוע..

מודעות פרסומת

להגיב »

עדיין אין תגובות.

RSS feed for comments on this post. TrackBack URI

להשאיר תגובה

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

הלוגו של WordPress.com

אתה מגיב באמצעות חשבון WordPress.com שלך. לצאת מהמערכת / לשנות )

תמונת Twitter

אתה מגיב באמצעות חשבון Twitter שלך. לצאת מהמערכת / לשנות )

תמונת Facebook

אתה מגיב באמצעות חשבון Facebook שלך. לצאת מהמערכת / לשנות )

תמונת גוגל פלוס

אתה מגיב באמצעות חשבון Google+ שלך. לצאת מהמערכת / לשנות )

מתחבר ל-%s

בלוג בוורדפרס.קום.

%d בלוגרים אהבו את זה: