ISNUMERIC( ) function is provided to us in SQL Server to check if the expression is valid numeric type or not. As per Microsoft it should work with Integers and Decimal data types and if data is valid integer or decimal, ISNumeric() should return us 1 else 0. But ISNUMERIC() does not work as expected with some of values specially when we have "-" or "d" in value and have two numbers after "d" such as 123d22, it still return us 1. Also if we have data in money format $XXXXX e.g $2000, It returns us 1.
In SQL Server 2012. Microsoft introduced new function call Try_Convert( ). You can use try_convert function to convert to required data type and if it is not able to convert then it will return Null as output. As you will see below, I did some experiment and found out that Try_Convert will produce 0 for "-" when we try to convert to Int, That should not be happening as "-" is symbol not Integer. But when I try to convert "-" to decimal, Try_Convert produced Null output.
Take a look in below results and keep in mind the outputs when you have to evaluate expression to Numeric or find out if expression is Numeric or Not.
In SQL Server 2012. Microsoft introduced new function call Try_Convert( ). You can use try_convert function to convert to required data type and if it is not able to convert then it will return Null as output. As you will see below, I did some experiment and found out that Try_Convert will produce 0 for "-" when we try to convert to Int, That should not be happening as "-" is symbol not Integer. But when I try to convert "-" to decimal, Try_Convert produced Null output.
Take a look in below results and keep in mind the outputs when you have to evaluate expression to Numeric or find out if expression is Numeric or Not.
USE TestDB GO CREATE TABLE #Customer (ColName VARCHAR(100)) GO --Insert some Sample Data INSERT INTO #Customer Select '1-2' Union Select '54f54' Union Select '123' Union Select '123.09' Union Select '-' Union Select '24d09' Union Select '$200' Union Select 'TestData' Union Select 'Street 123' Union Select '123$' Union Select '$234$' Union Select '1.2' Union Select '1' Union Select '234-4' Union Select '_' --Use ISNUMERIC AND TRY_Convert Functions to Check if Given Records Are Numeric OR NOT SELECT ColName ,ISNUMERIC(ColName) AS ISNUMERIC_Function_Output ,try_convert(DECIMAL(18, 3), ColName) AS DecimalConversion ,TRY_CONVERT(INT, ColName) AS INTConversion ,CASE WHEN ColName='-' THEN 'Not Numeric' WHEN try_convert(DECIMAL(18, 3), ColName) IS NOT NULL THEN 'NUMERIC' WHEN try_convert(INT, ColName) IS NOT NULL THEN 'NUMERIC' ELSE 'Not Numeric' END AS IsNumericOrNot FROM #Customer GO Drop table #customer
Fig 1: Using ISNUMERIC() or Try_Convert Function to evaluate if Expression is Numeric
SQL Server Video Tutorial: Learn Details of ISNUMERIC AND Try_Convert Function
Thanks for this valuable blog. It was very informative and interesting. Keep sharing this kind of stuff.
ReplyDeleteMatlab Training in Chennai
HTML5 Training in Chennai
Matlab Course in Chennai
ReplyDeleteThanks for this blog, it is very clear and easy to understand.
Best Linux Training Institute In Chennai
Linux Online Classes