基本上我有一个数据库,可以在每天的每一分钟检索数据。这是我公司过去三年发生的事情。我正在寻找一个查询,每天晚上11:00:00拉取所有记录。我有一个时间戳列,并尝试了以下,但它不会产生任何结果。时间戳格式如下:2011-10-13 16:59:00.000。
从WaterUsage中选择* 时间戳类似于'%23:00:00%'
谢谢。
更新:以下公式似乎有效,但遗漏了几天......不确定为什么......
用cte作为 (
选择
*
row_number()over(由datediff(d,0,Timestmp)按timestmp desc排序)作为rn
来自WaterUsage
)
选择 *
来自cte
其中rn = 1
更新:如果我要在一个时间范围内检索年度结果,这也可以。 从WaterUsage中选择*,其中TimeStmp> ' 2011'和TimeStmp< ' 2012'
答案 0 :(得分:0)
正确的答案是在开头放置空格,因为时间戳是日期+时间。
Select * from WaterUsage Where TimeStmp like '% 23:%'`
另一种方式:
Select * from WaterUsage Where UNIX_TIMESTAMP(TimeStmp)%86400 > 82800
您需要检查这两个选项的效果。
答案 1 :(得分:0)
如果您想在23:00获得记录
Select * from WaterUsage
where datepart(hour , TimeStmp) = 23 and datepart(minute , TimeStmp) = 00
如果您要从23:00到一天结束时获取记录
Select * from WaterUsage
where datepart(hour , TimeStmp) = 23
答案 2 :(得分:-1)
猜测你的时间戳列是你可以做的VARCHAR列
Select * from WaterUsage Where TimeStmp like '23:%'
如果时间戳字符串以' 23开始,表达式Timestamp like '23:%'
仅评估为true:'。所以23:00:00到23:59:59之间的每个时间戳都会匹配它。
注意(仅在时间戳列仅存储时间且没有日期时才适用) 不要把一个%放在23的前面因为那时表达式也会匹配03:23:50(只是一个例子)
**如果时间戳列中有前导日期,那么正确的查询将是
Select * from WaterUsage Where TimeStmp like '% 23:%'
只是为了确保在%和23之间包含空格