使用日期时间格式YYYYMMDDHHMMSS对1小时数据进行SQL查询

时间:2016-01-25 10:12:06

标签: sql

如何查询1小时数据,我的日期时间格式是YYYYDDMMHHMMSS

示例:

20120720094318
20120720121318
20120720144028

尝试在线查找查询仍然无效。

尝试:

enddate >= FORMAT(DATEADD(dd,-1,GETDATE()), 'yyyyMMdd000000')

我想要这样的事情: -

示例数据:

Cup     machine     end date
123      BB1         20120720092318
333      BB1         20120720094418
444      BB1         20120720084218
555      BB1         20120720082318

如果我在上面的样本数据上运行查询@ 10am我应该

Cup     machine     end date
123      BB1         20120720092318
333      BB1         20120720094418

这意味着要在早上9点到早上10点之间取得记录

2 个答案:

答案 0 :(得分:0)

尝试这样(在SQL-Server中工作):

这会将您的日期转换为“真实的”日期时间数据类型。

您可以使用字母数字值执行此操作,但我不会...

DECLARE @tbl TABLE(Cup INT,machine VARCHAR(100),[end] VARCHAR(100));
INSERT INTO @tbl VALUES
 (123,'BB1','20120720092318')
,(333,'BB1','20120720094418')
,(444,'BB1','20120720084218')
,(555,'BB1','20120720082318');

;WITH Converted AS
(
    SELECT Cup,machine,[end]   
          ,CONVERT(DATETIME,STUFF(STUFF(STUFF([end],9,0,' '),12,0,':'),15,0,':')) AS EndConverted 
    FROM @tbl      
)
SELECT *
FROM Converted
WHERE EndConverted BETWEEN {ts'2012-07-20 09:00:00'} AND {ts'2012-07-20 10:00:00'}

结果

Cup machine end             EndConverted
123 BB1     20120720092318  2012-07-20 09:23:18.000
333 BB1     20120720094418  2012-07-20 09:44:18.000

答案 1 :(得分:0)

这是将getdate()截断到当天的有效/高效方法,它获取自日历0引用日期(1900-01-01)以来的天数,然后将该天数添加到0参考日期。

dateadd(day, datediff(day,0, getdate() ), 0)

然后使用小时(getdate())

将当前小时添加到
dateadd(hour,hour(getdate()),dateadd(day, datediff(day,0, getdate() ), 0))

所以我们到达范围的起点。要获得范围的另一端,只需再添加1个小时:

dateadd(hour,hour(getdate())+1,dateadd(day, datediff(day,0, getdate() ), 0))

然后:

enddate >= FORMAT(dateadd(hour,hour(getdate()),dateadd(day, datediff(day,0, getdate() ), 0)), 'yyyyMMdd000000')
and enddate < FORMAT(dateadd(hour,hour(getdate())+1,dateadd(day, datediff(day,0, getdate() ), 0)), 'yyyyMMdd000000')

如果结果是你的enddate列是一个真正的日期时间列,请不要使用format()函数,因为你可以直接将datetime列与我们从getdate()

派生的计算日期时间值进行比较

即。 dateadd()返回日期时间

enddate >= dateadd(hour,hour(getdate()),dateadd(day, datediff(day,0, getdate() ), 0))
and enddate < dateadd(hour,hour(getdate())+1,dateadd(day, datediff(day,0, getdate() ), 0))

注意:我没有使用或建议在之间使用作为日期范围,请使用组合&gt; = with&lt;代替。

要截断getdate(),另一种方法是使用强制转换(getdate()作为日期)并将其作为您可以使用的基础:

enddate >= FORMAT(dateadd(hour,hour(getdate()), cast(getdate() as date)), 'yyyyMMdd000000')
and enddate < FORMAT(dateadd(hour,hour(getdate())+1, cast(getdate() as date)), 'yyyyMMdd000000')

或者,如果不是varchar列,但是datetime:

enddate >= dateadd(hour,hour(getdate()), cast(getdate() as date))
and enddate < dateadd(hour,hour(getdate())+1, cast(getdate() as date))