У меня есть таблица с столбцом datetime, и я извлекаю записи с помощью оператора select, я не уверен с частью «где», где я хочу только записи из вчерашнего С 3 вечера до сегодняшнего дня. Пожалуйста помоги., чтобы получить записи между вчерашним 3 вечера и сегодняшним сервером 3pm sql
ответ
Вы можете использовать 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))
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))
подумайте о том, как объяснить свой код в интересах других, там есть какая-то сложность. – ADyson
Если вы хотите указать даты со временем, вы должны указать 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
читать о 'between' – Jens
уа спасибо Jens, но я не уверен в части времени. – rohini