我有一个包含记录的表,带有DATETIME列。我正在编写一个存储过程,它将采用startTime和endTime并返回这两次之间的所有记录。我想强制用户以特定格式提供时间('YYYY-MM-DDThh:mm:ss.nnn')。原因是我没有我的表包含很多记录,我不想将数据检索限制在同一天的两个时间点(因此它们必须至少提供几秒的粒度)。
是否有执行此操作?
感谢。
答案 0 :(得分:2)
是的,但是你必须将参数作为字符串(varchar)而不是datetime,因为日期时间值2010-12-08
和2010-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代替: