我想创建两个DATETIME
变量,当在SQL Server 2008上的存储过程中只给出一个BETWEEN AND
时,我可以用它来检查DATETIME
。
因此,当我获得2012/12/31 15:32:12
作为输入时,我想生成两个新变量,即@from = 2012/12/31 00:00:00
和@to = 2012/12/31 23:59:59
。
这两个变量用于检查记录是否位于它们之间 - 即与输入日期在同一天。
我愚弄了使用CAST和CONVERT,但我真的不知道如何以我想要的方式操纵日期。
我应该这样做吗?还是有我不知道的功能?
答案 0 :(得分:4)
现在它与版本无关
declare @from datetime, @to datetime
SET @from = convert(varchar, convert(datetime, '2012/12/31 15:32:12', 111), 112)
SET @to = DATEADD(day, 1, @from)
select * from yourtable where test date >= @from AND date < @to
答案 1 :(得分:2)
你可以;
declare @input datetime = '2012/12/31 15:32:12'
declare @from datetime = dateadd(day, 0, datediff(day, 0, @input))
declare @to datetime = dateadd(second, -1, dateadd(day, 1, @from))
>>>
2012-12-31 00:00:00.000 2012-12-31 23:59:59.000
答案 2 :(得分:1)
小心@to的准确性。 23:59:59.001是一个有效的日期,但如果你减去一整秒,它就不会显示在你的范围内。
更常见的是设置@from然后使用&lt; @from + 1而不是BETWEEN。 (加号在SQL中添加了整天)。
答案 3 :(得分:0)
首先使用适当的日期格式(在本例中为111)将输入日期转换为varchar,对于到目前为止,请附加午夜时间
然后将varchar转换回日期时间。
示例:
SELECT @from = CAST(CONVERT(VARCHAR(10), GETDATE(), 111) AS DATETIME)
,@to = CAST(CONVERT(VARCHAR(10), GETDATE(), 111)+' 23:59:59:997' AS DATETIME)
这是一个有用的日期时间格式图表,并附有简要说明。