我有一个RUBY HASH,它是以下oracle-database查询的结果:
Request.where("customer_id = #{customer.id} AND request_method != 'OPTIONS' AND request_time BETWEEN ? AND ?", start_time, end_time).group(:request_time).count(:request_time)
RESULT => {2022-04-21 14:07:16 UTC=>22, 2022-04-25 14:07:16 UTC=>3}是否有一种方法可以迭代散列并将UTC Format转换为DATE format,同时保留值,从而只更改键?
所以看起来是这样的:
{2022-04-21=>22, 2022-04-25=>3}我试过的
dates_init_hash = {}
(start_time.to_date..end_time.to_date).each do |date|
dates_init_hash[date] = 0
end
requests.each do |key,value|
date = Date.parse(key.to_date.iso8601)
puts date
next if dates_init_hash[date].nil?
dates_init_hash[date] += 1
end我的想法
如果我能够在数据库查询之后直接转换UTC,它将使我免于通过dates_init_hash方法运行UTC。
发布于 2022-04-27 10:46:03
您似乎在问如何仅使用date组件而忽略时间组件来返回request_time的计数。在Oracle中,您可以使用:
SELECT TRUNC(request_time) AS request_day,
COUNT(request_time) AS num_requests
FROM table_name
WHERE customer_id = ?
AND request_method != 'OPTIONS'
AND request_time BETWEEN ? AND ?
GROUP BY
TRUNC(request_time)通过直接调用answer (而不是试图在Ruby中动态构建查询),这个Ruby似乎给出了类似的Ruby解决方案。
https://stackoverflow.com/questions/72027184
复制相似问题