如何检查 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
下面的函数需要以下字符串
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