Sql server 创建;在/和之间-从给定日期时间开始启用日期时间

Sql server 创建;在/和之间-从给定日期时间开始启用日期时间,sql-server,tsql,datetime,Sql Server,Tsql,Datetime,我想创建两个DATETIME变量,当在SQL Server 2008上的存储过程中只给定一个DATETIME时,我可以使用它们在和之间进行检查 因此,当我得到2012/12/31 15:32:12作为输入时,我想从中生成两个新变量,分别是@from=2012/12/31 00:00:00和@to=2012/12/31 23:59:59 这两个变量用于检查记录是否位于它们之间,也就是说,与输入日期在同一天 我在使用CAST和CONVERT时无所事事,但我真的不知道如何以我想要的方式操纵日期 我应该

我想创建两个
DATETIME
变量,当在SQL Server 2008上的存储过程中只给定一个
DATETIME
时,我可以使用它们在和之间进行检查

因此,当我得到
2012/12/31 15:32:12
作为输入时,我想从中生成两个新变量,分别是
@from=2012/12/31 00:00:00
@to=2012/12/31 23:59:59

这两个变量用于检查记录是否位于它们之间,也就是说,与输入日期在同一天

我在使用CAST和CONVERT时无所事事,但我真的不知道如何以我想要的方式操纵日期

我应该换一种方式吗?或者有我不知道的功能吗?

你可以

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
你可以

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

现在它是版本独立的

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
声明@from datetime,@到datetime
SET@from=convert(varchar,convert(datetime,'2012/12/31 15:32:12',111),112)
设置@to=DATEADD(第1天,@from)
从测试日期>=@from和日期<@to的表中选择*

现在它与版本无关

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
声明@from datetime,@到datetime
SET@from=convert(varchar,convert(datetime,'2012/12/31 15:32:12',111),112)
设置@to=DATEADD(第1天,@from)
从测试日期>=@from和日期<@to的表中选择*

首先,使用适当的日期格式(本例中为111)将输入日期转换为varchar,对于to日期,附加午夜时间

然后将您的varchar转换回datetime

例如:

SELECT @from = CAST(CONVERT(VARCHAR(10), GETDATE(), 111) AS DATETIME)
      ,@to = CAST(CONVERT(VARCHAR(10), GETDATE(), 111)+' 23:59:59:997' AS DATETIME)
下面是一个有用的datetime格式图表,并附有简要说明


首先使用适当的日期格式(本例中为111)将输入日期转换为varchar,对于to日期,附加午夜时间

然后将您的varchar转换回datetime

例如:

SELECT @from = CAST(CONVERT(VARCHAR(10), GETDATE(), 111) AS DATETIME)
      ,@to = CAST(CONVERT(VARCHAR(10), GETDATE(), 111)+' 23:59:59:997' AS DATETIME)
下面是一个有用的datetime格式图表,并附有简要说明


注意@to的准确性。23:59:59.001是有效日期,但如果减去整秒,则不会显示在您的范围内


更常见的做法是设置@from,然后使用<@from+1而不是介于两者之间。(在SQL中,加号会增加整整一天)。

请注意@to的准确性。23:59:59.001是有效日期,但如果减去整秒,则不会显示在您的范围内


更常见的做法是设置@from,然后使用<@from+1而不是介于两者之间。(加号在SQL中增加了整天)。

它告诉我,
日期不是一个定义的系统类型
--这个版本特定吗?现在它是版本独立的它告诉我,
日期不是一个定义的系统类型
--这个版本特定吗?现在它是版本独立的yep,更好地使用>=是的,更好地使用>=和