No SQL Server 2012, você pode usar
TRY_CONVERT
:SELECT TRY_CONVERT(DATETIME2, '2012-02-02 13:42:55.2323623'),
TRY_CONVERT(DATETIME2, '2012-02-31 13:42:55.2323623');
Resultados:
2012-02-02 13:42:55.2323623 NULL
Ou
TRY_PARSE
:SELECT TRY_PARSE('2012-02-02 13:42:55.2323623' AS DATETIME2),
TRY_PARSE('2012-02-31 13:42:55.2323623' AS DATETIME2);
(Os mesmos resultados.)
Desculpe por não ter uma resposta inteligente para você para
SELECT ISDATE(LEFT('2012-02-02 13:42:55.2323623', 23));
Mas isso parece sujo.
TRY_CONVERT
documentação no Microsoft Docs
TRY_PARSE
documentação no Microsoft Docs