如何查询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点之间取得记录
答案 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))