I developed a utility in SQL Server 2008 and recently upgraded to SQL Server 2012. The job of this utility is to receive the data from external sources, validate the data and insert the data into respective fields of a table for further processing. I used one of the famous SQL functions ISDATE() to validate the date fields in this utility and it was working perfect. Recently, I began to receive some errors. After debugging, I found that ISDATE() is not compatible with datetime2 datatype.
Let me demonstrate the error before heading towards the solution.
--This script is compatible with SQL Server 2008 and above. DECLARE @Datetime2 AS DATETIME2 SET @Datetime2=GETDATE() SELECT ISDATE(@Datetime2) AS [Validate_Date] GO --OUTPUT
Msg 8116, Level 16, State 1, Line 4
Argument data type datetime2 is invalid for argument 1 of isdate function.
Opsssssssssssss, I cannot validate the datetime2 datatype using ISDATE() function. So what is the solution ?
SOLUTION :
I developed the given below solution using TRY_CONVERT() (One of the new conversion functions shipped with SQL Server 2012)
Given below is the script.
--This script is compatible with SQL Server 2012 and above. DECLARE @Datetime2 AS DATETIME2 DECLARE @Varchar AS VARCHAR(10) SET @Datetime2=GETDATE() SET @Varchar='raresql' SELECT IIF(TRY_CONVERT(DATETIME,@Datetime2) is null ,0,1) AS [Validate_Date] ,IIF(TRY_CONVERT(DATETIME,@Varchar) is null ,0,1) AS [Validate_Date] GO --OUTPUT
Do share if you came across this issue and resolved it differently.
Leave a Reply