【发布时间】:2016-09-29 05:28:34
【问题描述】:
我有一个带有 datetime 列的表,我使用 select 语句提取记录,我不确定“where”部分我只想要从昨天下午 3 点到今天下午 3 点的 sql 服务器的记录。请帮忙。
【问题讨论】:
-
阅读
between -
谢谢 Jens,但我不确定时间部分。
标签: sql sql-server datetime where clause
我有一个带有 datetime 列的表,我使用 select 语句提取记录,我不确定“where”部分我只想要从昨天下午 3 点到今天下午 3 点的 sql 服务器的记录。请帮忙。
【问题讨论】:
between
标签: sql sql-server datetime where clause
您可以使用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))
【讨论】:
当你想用时间指定日期时,你必须在ISO 8601 standard中指定日期时间文字
SQLServer 2000 及更高版本支持 ISO 8601。
日期时间的 ISO 8601 标准是: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'
关于昨天和今天下午 3 点的具体问题。您可以使用以下代码:
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
【讨论】:
DATEADD(D,-1,GETDATE()):给你最后的日期
DATEADD(HOUR,.....):将增加 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))
【讨论】: