3

好的,我正在从 Visual Studio 2008 中运行查询生成器。我正在尝试按时间过滤查询结果;也就是我想把昨天开始到昨天中午的所有东西都拉出来。我昨天一直在使用 GETDATE()-1 ,它会拉出时间戳 mm/dd/yyyy hh:mm:ss 但是,它会拉出当前时间。为了让它从一天的开始运行,我附加了时间戳以删除时间本身,所以它从一天的开始开始:

convert(varchar(10), getdate()-1, 120)

所以我使用 between 来查找范围,我有: BETWEEN convert(varchar(10), getdate()-1, 120) AND // 这是我需要在中午切断它的地方。

我知道 datetime 在这里是一种数据类型,所以我尝试使用日期部分减去小时/分钟/秒,但 datepart() 只返回整数并且不影响时间。

想法?我怎样才能让这个在中午切断

4

5 回答 5

3

尝试这个:

--Variables
declare @now datetime = getdate(),
        @yesterday datetime

--Yesterday starting datetime
select @yesterday = convert(datetime, convert(date, dateadd(day,-1,@now)))

--Your query to filter between y'day start and y'day noon
--Note that between means inclusive boundary values. (or use >= and <=)
select * from yourTable
where dateCol between @yesteray and dateadd(hour,12,@yesterday)
于 2013-10-18T18:38:08.340 回答
1
between DateAdd(day, -1, cast(getdate() as date)) and DateAdd(hour, -12, cast(getdate() as date))

编辑:如评论中所述,您不能将小时与日期一起使用,您必须将其转换回日期时间,因此:

between DateAdd(day, -1, cast(getdate() as date)) and DateAdd(hour, -12, cast(cast(getdate() as date) as datetime))
于 2013-10-18T17:07:23.920 回答
1
SELECT * FROM T WHERE YourDate BETWEEN CAST(GETDATE()-1 As DATE) AND DATEADD(Hour, -12, CAST(CAST(GETDATE() As DATE) As DATETIME) )

请注意,因为BETWEEN将包括下限和上限,因此如果您不想被考虑在内,您可以简单地BETWEEN替换为x >= y and y < zyesterday at 12:00

于 2013-10-18T17:07:37.837 回答
1
DECLARE
    @Min DATETIME
  , @Max DATETIME

SELECT
    @Min = DATEADD(DAY, -1, CAST(FLOOR(CAST(GETDATE() AS FLOAT)) AS DATETIME))
  , @Max = DATEADD(HOUR, 12, CAST(FLOOR(CAST(GETDATE() AS FLOAT)) AS DATETIME))

SELECT *
FROM <Table> x
WHERE x.[Date] BETWEEN @Min AND @Max
于 2013-10-18T17:33:38.757 回答
1

如果您想获得最后 30 分钟的结果,您需要使用它。MINUTE你也可以换成HOUR

--Get now, hour and second included    
DECLARE @NOW DATETIME = GETDATE() 

--Get 30 mins from now
DECLARE @TranDate DATETIME 
SET @TranDate = CONVERT(DATETIME, CONVERT(DATETIME, DATEADD(MINUTE,-30,@NOW))) 

之后,将以下代码添加到您的 where 语句中,

AND TK.TransactionDate >= @TranDate
于 2015-04-15T09:06:57.257 回答