در این ویدئو مهندس مسعود طاهری قصد دارد درباره تابع ISNumeric در SQL Server صحبت کند.
در این ویدئو مهندس مسعود طاهری قصد دارد درباره تابع ISNumeric در SQL Server صحبت کند.
تمامی حقوق مادی و معنوی این وب سایت متعلق به نیک آموز می باشد. این سایت توسط تیم آموزش برنامه نویسی نیک آموز مدیریت می شود.
6 دیدگاه
محسن
با سلام
در این نمونه ای که شما به اشتراک گذاشته اید احتمالا از کاراکتر Tab استفاده شده است که به عنوان یک جدا کننده در نظر گرفته میشود و همین باعث می شود که اس کیو ال این رشته را عدد در نظر بگیرد به مانند اینکه در یک رشته ما کاراکتر $ داشته باشیم.
وحید
با سلام به احتمال زیاد شاید از دو تا اسپیس استفاده شده و همین موضوع احتمال دارد اس کیو ال این رو یک کارکتر حساب کند و این احتمال هم وجود دارد که شما از یک متغیر $ استفاده کردین یعنی هم میشه در سنگل کوتیشن هم رشته تعیر کرد و هم عدد و این مشکل از ISNUMERICنیست چون میشه تبدیل کردن .
حسین جوادی نیا جوادی نیا
با اجازه دوستان من اسکریپتی که نوشتم و برای خودم منطقی بنظر اومد، بهمراه توضیحات، اینجا میذارم . حالا تا چه حد نظر من درسته؟ داوری رو باید به عهده اساتید محترم گذاشت.
بنظر تایع 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 شده.
محمود
با سلام و تشکر
نمی دونم، لطفا پاسخ رو بفرمایید.
مهران
سلام
من از Sql نسخه 2016 (Management Studio v17.3) استفاده میکنم .هر چقدر هم با فاصله (space) تست کردم میگه عدد نیست .در واقع درست اعلام میکنه
منصوره قربانی
این تابع برای ورودی هایی مثل ‘0d2345′ یا ’12e34’ یا ‘$’ هم مقدار یک رو برمیگردونه 😉