SQL SERVER CHECK NUMBER

  • פותח הנושא rnan
  • פורסם בתאריך

pitoach

New member
זה לא קשור
פשוט

1. הפונקציה הזו לא קשורה למה שאתה מחפש (ראה מדריך קצר על הפונקציה ועל ISNUMERIC). זה לא המטרה שלה פשוט ואין בה שום בעיה או באג או דברים חלוקי דעות. היא פשוט מבצעת בדיקה אחרת.
2. לא ניתן להכניס בצורה מובנית כל פונקציה שכל אחד חשב עליה. אחרת היו מספקים שלנו את השרת לא עם 4G אלא עם 400G

3. פונקציה זו לא חדשה ב 2012 אלא נמצאת בגרסאות קודמות
 

pitoach

New member
גרי הפתרון בבלוג לא מכסה את כל המצבים

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

א. מקרה של מספר עם פסיקים + עם נקודה עשרונית כמו למשל 12,345,678.34
במקרה זה מיקום הפסיק הראשון הוא לא 4 אלא 4 ועוד המיקום של הנקודה ז"א 7 ולכן החלק הזה בשאילתה משתנה:
PatIndex('%,%',Reverse(@N1)) In (0,4)
על פי תנאי זה המספר הבא יהיה תקין וזה לא נכון 12,345,8.4

ב. כמו כן לא מכוסה מצב של פסיק שמופיע למשל במיקום 4 מהסוף אבל שיש נקודה אחרי כמו למשל 4,231,424,2.4,834

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

כלליים

New member
עוד הצעה

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

את הסלשים יש למחוק. הם נוספו בגלל מגבלות האבטחה של האתר.
declar//e @isnum bit
begin try
set @isnum=CAST(replac//e('1D8','.','') as bigint)
end try
begin catch
set @isnum=0
end catch
select @isnum
 
למעלה