WITH PotentialDates (d) AS ( SELECT '2013-01-08 15:44:12.2081606 +05:30' UNION ALL SELECT '2013-01-08 15:44:12.2081606' UNION ALL SELECT '2013-01-08 15:44:12.208' UNION ALL SELECT '2013-01-08' UNION ALL SELECT 'YYYY-DD-MM HH:MM:SS.mmmmmm' )SELECT IsDate=ISDATE(d) ,PATINDEX('[0-9][0-9][0-9][0-9][-][0-9][0-9][-][0-9][0-9]', LEFT(d, 10)) ,ISDATE(LEFT(d, 23))FROM PotentialDates
DECLARE @String VARCHAR(50) = '2013-01-08 15:44:12.20848489 -05:30'IF PATINDEX('%[A-Z]%',@String) = 0BEGIN SELECT CASE WHEN LEN(@String) = 10 THEN 'Date' WHEN LEN(@String) = 23 THEN 'DateTime' WHEN CHARINDEX('+',@String) > 0 THEN '+ Offset' WHEN CHARINDEX('-',REVERSE(@String)) <=6 THEN '- Offset' END AS WhatIsTheDataType ENDELSESELECT 'You have not supplied a valid date'