درباره نویسنده

مسعود طاهری

مسعود طاهری

عاشق علیرضا (پسرم) و همسرم. در ضمن SQL Server را هم دوست دارم.

6 Comments

  1. محسن

    با سلام
    در این نمونه ای که شما به اشتراک گذاشته اید احتمالا از کاراکتر Tab استفاده شده است که به عنوان یک جدا کننده در نظر گرفته میشود و همین باعث می شود که اس کیو ال این رشته را عدد در نظر بگیرد به مانند اینکه در یک رشته ما کاراکتر $ داشته باشیم.

    پاسخ دادن
  2. وحید

    با سلام به احتمال زیاد شاید از دو تا اسپیس استفاده شده و همین موضوع احتمال دارد اس کیو ال این رو یک کارکتر حساب کند و این احتمال هم وجود دارد که شما از یک متغیر $ استفاده کردین یعنی هم میشه در سنگل کوتیشن هم رشته تعیر کرد و هم عدد و این مشکل از ISNUMERICنیست چون میشه تبدیل کردن .

    پاسخ دادن
  3. حسین جوادی نیا جوادی نیا

    حسین جوادی نیا جوادی نیا

    با اجازه دوستان من اسکریپتی که نوشتم و برای خودم منطقی بنظر اومد، بهمراه توضیحات، اینجا میذارم . حالا تا چه حد نظر من درسته؟ داوری رو باید به عهده اساتید محترم گذاشت.
    بنظر تایع ISNUMERIC قبل از بررسی عدد بودن یا نبودن یک کارکتر، سعی میکنه که اون رو به انواع و اقسام دیتا تایپ های عددی کانورت کنه.لذا علت رو میشه از نوع تبدیلی که تابع ISNUMERIC انجام میده فهمید. در نتیجه این امر باعث میشه که اگر معادلی پیدا کرد، اون کارکتر رو عدد در نظر میگیره. به کدی که اینجا نوشتم توجه کنید:
    DECLARE @Table TABLE ([IsNumeric] INT , [Character] NVARCHAR(5),[ASCII] INT ,Try_ConvertingtoNumeric NUMERIC,Try_ConvertingtoMONEY MONEY)
    DECLARE @ASCII INT = 0
    WHILE @ASCII <= 255

    BEGIN
    INSERT INTO @Table
    SELECT ISNUMERIC(CHAR(@ASCII)),CHAR(@ASCII),@ASCII , TRY_CONVERT(NUMERIC,CHAR(@ASCII)),TRY_CONVERT(MONEY,CHAR(@ASCII))
    SET @ASCII = @ASCII + 1

    END

    SELECT * FROM @Table
    WHERE [IsNumeric] =1;
    GO
    این کد تمامی کارکتر ها از ۰ تا ۲۵۵ رو با دو تابع TRY_CONVERT (از نوع NUMERIC & MONEY ) و ISNUMERIC مورد بررسی قرار میده. اگر به ستون های Try_ConvertingtoMONEY و Try_ConvertingtoNumeric دقت کنید متوجه تفاوت این دو کانورت میشید. جاهایی که تبدیل به NUMERIC مقدور نبوده، تبدیل به MONEY برابر صفر شده و همین کانورت به یکی از انواع عدد در برخی کارکترها، باعث به خطا افتادن تابع ISNUMERIC شده.

    پاسخ دادن
  4. محمود

    با سلام و تشکر
    نمی دونم، لطفا پاسخ رو بفرمایید.

    پاسخ دادن
  5. مهران

    سلام
    من از Sql نسخه 2016 (Management Studio v17.3) استفاده میکنم .هر چقدر هم با فاصله (space) تست کردم میگه عدد نیست .در واقع درست اعلام میکنه

    پاسخ دادن
  6. منصوره قربانی

    منصوره قربانی

    این تابع برای ورودی هایی مثل ‘0d2345′ یا ’12e34’ یا ‘$’ هم مقدار یک رو برمیگردونه 😉

    پاسخ دادن

ارسال نظر

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

تمامی حقوق مادی و معنوی این وب سایت متعلق به نیک آموز می باشد.
این سایت توسط تیم آموزش برنامه نویسی نیک آموز مدیریت می شود.

جهت مشاهده جدیدترین دوره‌های غیرحضوری کلیک کنید | تابستان 1399
close-image