如何在T-SQL中强制执行特定的日期格式?

时间:2010-12-08 08:35:33

标签: sql-server sql-server-2005 tsql

我有一个包含记录的表,带有DATETIME列。我正在编写一个存储过程,它将采用startTime和endTime并返回这两次之间的所有记录。我想强制用户以特定格式提供时间('YYYY-MM-DDThh:mm:ss.nnn')。原因是我没有我的表包含很多记录,我不想将数据检索限制在同一天的两个时间点(因此它们必须至少提供几秒的粒度)。

是否有执行此操作?

感谢。

4 个答案:

答案 0 :(得分:2)

是的,但是你必须将参数作为字符串(varchar)而不是datetime,因为日期时间值2010-12-082010-12-08 00:00:00.000是相同的。

您可以验证输入字符串的长度是否符合要求,然后使用convert(datetime, startTime, 126)将它们转换为日期时间。

答案 1 :(得分:1)

只有当您接受字符串作为日期时才可以强制使用特定格式 - 然后,您可以尝试使用您的格式解析该字符串,如果失败则会抛出错误。

但是,如果你的存储过程接受DATETIME变量,则没有'格式' - 它只是一个带值的变量。

答案 2 :(得分:1)

你的意思是:

IF   @arg NOT LIKE    '19[0-9][0-9]-[0-1][0-9]-[0-3][0-9]T[0-2][0-9]:[0-5][0-9]:[0-5][0-9].[0-9][0-9][0-9]'
 AND @arg NOT LIKE '2[01][0-9][0-9]-[0-1][0-9]-[0-3][0-9]T[0-2][0-9]:[0-5][0-9]:[0-5][0-9].[0-9][0-9][0-9]'
RAISERROR('Wrong format', 10, 1)

仅当@arg作为字符串传递时。

答案 3 :(得分:0)

只要用户提供任何有效日期格式,您就应该接受它。学习使用CAST和CONVERT代替:

http://msdn.microsoft.com/en-us/library/ms187928.aspx