检查varchar输入是否为有效日期

时间:2014-09-25 13:35:06

标签: sql sql-server

我在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 

如何验证日期是否有效,例如它的格式是否正确且是真实日期?

2 个答案:

答案 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