如何检查 TSQL 函数中的日期时间格式是否正确?

How to check for the correct datetime format in TSQL function?

下面的函数需要以下字符串

22.03.2016
28.02.2017 00:00:00
NULL

有时该列包含垃圾,如 '22.003.2016'

如何使用 SQL Server 2008 R2 在 T-SQL 中处理这种情况?

ALTER FUNCTION [dbo].[GetItemDocDetailDataInput] 
    (@ItemDocDetailID uniqueidentifier)
RETURNS datetime2(7) 
AS
BEGIN
    DECLARE @str nvarchar(20);
    DECLARE @dataInput datetime2(7);

    SELECT @str = ISNULL([DataInput], null) 
    FROM 
        (SELECT 
             ISNULL([Value], '') AS [Value],    
             CASE
                WHEN [Value] IS NULL THEN NULL
                ELSE SUBSTRING([Value], 0, 11)
             END AS DataInput 
         FROM 
             ItemDocDetailParams 
         WHERE 
             ItemDocDetailID = @ItemDocDetailID 
             AND ItemParamTypeID = 12) D

    SELECT @dataInput = CONVERT(datetime2(7), @str, 103) 

    RETURN @dataInput;
END

我假设最好的方法是创建另一个 tsql 函数,我可以在其中检查字符串中的点位置,例如

22.03.2016
28.02.2017 00:00:00

所以我将使用以下语句的组合

SELECT CHARINDEX('.', '13.05.2019') AS FirstDot; 
3 -- ОК

SELECT CHARINDEX('.', '13.05.2019', 4) AS SecondDot;
6 -- ОК

SELECT CHARINDEX('.', '13.005.2019', 4) AS MatchPosition; 
7 --- NOT OK