2016-09-29 6 views
-2

У меня есть таблица с столбцом datetime, и я извлекаю записи с помощью оператора select, я не уверен с частью «где», где я хочу только записи из вчерашнего С 3 вечера до сегодняшнего дня. Пожалуйста помоги., чтобы получить записи между вчерашним 3 вечера и сегодняшним сервером 3pm sql

+0

читать о 'between' – Jens

+0

уа спасибо Jens, но я не уверен в части времени. – rohini

ответ

1

Вы можете использовать GETDATE(), чтобы получить сегодня, и GETDATE() - 1, чтобы получить дату по дате. Затем вы можете удалить временную часть и добавить 15 часов, чтобы добраться до 3 вечера к обеим датам.

SELECT * FROM tableName 
WHERE dateColumn BETWEEN DATEADD(hh,15,DATEADD(dd,DATEDIFF(dd,0,GETDATE()-1),0)) 
AND DATEADD(hh,15,DATEADD(dd,DATEDIFF(dd,0,GETDATE()),0)) 
0

DATEADD (D, -1, GETDATE()): Дает последнюю дату

DATEADD (ЧАС, .....): Добавлю 15 часов (обязательно 3: 00 П.М., поэтому добавил 15 часов)

SELECT 
    * 
FROM TableName E 
WHERE 
E.BirthDate>=DATEADD(HOUR,15, CAST(CAST(DATEADD(D,-1,GETDATE()) AS Date) AS datetime)) 
AND E.BirthDate<=DATEADD(HOUR,15, CAST(CAST(GETDATE() AS Date) AS datetime)) 
+0

подумайте о том, как объяснить свой код в интересах других, там есть какая-то сложность. – ADyson

0

Если вы хотите указать даты со временем, вы должны указать DateTime буквального в ISO 8601 standard

ISO 8601 поддерживается SQLServer 2000 и далее.

ISO 8601 стандарт для DateTime является: YYYY-MM-DDThh:mm:ss.nnn[Z]

CREATE TABLE #testingTime(a int, timeofinsert datetime) 
INSERT INTO #testingTime 
values (1, '2016-09-28T17:05:00'), 
(2,'2016-09-29T14:05:00'), 
(3,'2016-09-29T18:05:00') 

SELECT * FROM #testingTime WHERE timeofinsert 
> '2016-09-28T15:00:00' AND timeofinsert < ='2016-09-29T15:00:00' 

Для вашего конкретного вопроса для вчера и сегодня 3PM. вы можете использовать следующий код:

CREATE TABLE #testingTime(a int, timeofinsert datetime) 
INSERT INTO #testingTime 
values (1, '2016-09-27T17:05:00'), 
(2,'2016-09-28T14:05:00'), 
(3,'2016-09-28T18:05:00') 


DECLARE @yesterday3PM datetime = convert(varchar(10),convert(date,getdate()-1)) + 'T15:00:00' 
DECLARE @today3PM datetime = convert(varchar(10),convert(date,getdate())) + 'T15:00:00' 

select @yesterday3PM, @today3PM 
SELECT * FROM #testingTime WHERE timeofinsert 
> @yesterday3PM AND timeofinsert < = @today3PM