如何在 TSQL 函数中检查正确的日期时间格式?
Posted
技术标签:
【中文标题】如何在 TSQL 函数中检查正确的日期时间格式?【英文标题】:How to check for the correct datetime format in TSQL function? 【发布时间】:2021-03-14 01:51:34 【问题描述】:下面的函数需要以下字符串
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
【问题讨论】:
【参考方案1】:我认为最好的方法是创建另一个 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
【讨论】:
我认为最好的方法是修复数据模型以将时间数据存储在正确键入的日期/时间类型而不是字符串中。 @DanGuzman 我知道兄弟,但没有机会这样做。无论如何,在 MS SQL Server 的更高版本中有 try_parase() 和 try_convert() TSQL 方法...以上是关于如何在 TSQL 函数中检查正确的日期时间格式?的主要内容,如果未能解决你的问题,请参考以下文章