PDA

View Full Version : Error converting type varchar to int



dan
دوشنبه 16 آذر 1383, 13:06 عصر
سلام به همگی
برای اینکه بدانم یک پارامتر char یا Varchar قابل تبدیل به عدد است یا نه ، غیر از فانکشن
IsNumeric(‘MyString’) چه راهی می شناسید ؟ آیا گزینه هایی مانند
Try … except یا OnPostError یا On Error resume وجود دارد؟ گمان می کنم Isnumeric روش مطمئنی نباشد چون مثلا عبارت ‘-.’ را عدد می شناسد ولی وقتی می خواهیم آنرا در یک فیلد INT ذخیره کنیم خطا می دهد .

AminSobati
دوشنبه 16 آذر 1383, 22:34 عصر
دوست عزیزم،
این یک امر قابل پیش بینیه که (.) و (-) جزء اعداد محسوب بشن. چون اعداد هم میتونن منفی باشند و هم اعشاری. اگر هدف شما اینه که واقعا اعداد Integer، یعنی مثبت و غیر اعشاری رو ذخیره کنین میشه که اول اون String رو توسط تابع CAST به جنس Money تبدیل کنین که هم اعداد منفی قبول میکنه و هم اعشاری.
این کار صرفا برای اینه که SQL Server هیچ گونه Error به شما نده. حالا نتیجه رو توسط تابع FLOOR قسمت غیر اعشاری یا صحیحش رو بدست میاریم. در اینجا شما از تابع ROUND هم میتونین استفاده کنین چون ممکنه قصد داشته باشید به فرض عدد 4.7 به 5 تبدیل بشه در حالی که FLOOR عدد 4 رو خواهد داد.
حالا چون احتمال میدیم String اولیه دارای منفی باشه که مغایر جنس Int خواهد بود، توسط ABS به عدد مثبت تبدیل میکنیم. البته چون FLOOR برای اعداد مثبت و منفی متفاوت عمل میکنه میتونین اول ABS رو استفاده کنین بعدا Floor. مثال:

declare @MyStr varchar(20)
declare @MyInt int

set @MyStr = '-4.1'

select @MyInt=floor(abs(cast (@MyStr as money)))

select @MyInt

dan
دوشنبه 16 آذر 1383, 22:41 عصر
از پاسخ شما متشکرم . حل شد :D

AminSobati
دوشنبه 16 آذر 1383, 23:13 عصر
ضمنا چون در مورد On error سوال کردین فراموش کردم این خبر خوب رو بدم که SQL Server 2005 به شما امکان نوشتن Code در زبان VB DOT NET رو میده لذا از امکانات Try...Catch برای Exception Handling هم میتونین استفاده کنین. البته نه تنها این بلکه به هر زبانی که DOT NET از اون پشتیبانی کنه میتونین Code بنویسین. فکرش رو بکنین.. به نظر شما حیرت انگیز نیست که مثلا با COBOL بتونین Stored Procedure بنویسین؟ :)