我在SQL Server中有一个表,用于存储日期以及它们是否是工作日,包括公共假日。
Date_Id Date_Date Date_JDE Is_WorkingDay
20141223 2014-12-23 114357 1
20141224 2014-12-24 114358 1
20141225 2014-12-25 114359 0
20141226 2014-12-26 114360 0
20141227 2014-12-27 114361 0
20141228 2014-12-28 114362 0
20141229 2014-12-29 114363 1
我创建了一个存储过程,该过程遍历表并查找日期,如果日期是非工作日,则会找到下一个日期。
DECLARE @TargetDate Date = '2014-12-29'
IF (@TargetDate IS NOT NULL)
BEGIN
SELECT TOP 1 *
FROM dbo.Dates
WHERE Date_Date >= @TargetDate
AND Date_Date <= (SELECT MIN(Date_Date)
FROM dbo.Dates
WHERE Is_WorkingDay != 0 AND Date_Date >= @TargetDate)
ORDER BY Date_Date DESC
END
ELSE
BEGIN
RAISERROR ('(TargetDate is required) is required ',10,1);
RETURN
END
如何验证日期是否有效,例如它的格式是否正确且是真实日期?
答案 0 :(得分:1)
如果您知道输入格式。 使用
SET DATEFORMAT format
&安培;将输入转换为 try catch 块中的日期时间/日期。如果错误无效,则提出错误
答案 1 :(得分:1)
我重写了你的脚本,试试这个:
DECLARE @TargetDate CHAR(10) = '2014-12-29'
IF @TargetDate is NULL
SELECT '(TargetDate is null)'
ELSE
BEGIN TRY
SELECT MIN(Date_Date)
FROM dbo.Dates
WHERE
-- choose the format you need in convert. I used 126 which is isoformat
Date_Date >= convert(datetime, @TargetDate, 126) AND
Is_WorkingDay != 0
END TRY
BEGIN CATCH
SELECT '(TargetDate is invalid)'
END CATCH