我的pgsql数据库中的一个表格有一个名为&#34的列;持续时间"它目前存储一个字符串,例如.." 5m 21s" ..意思是5分21秒。
我正在创建一个rake任务,将这些重新格式化为总秒数。
所以" 5分21秒"会成为" 321"。
...现在我可以写一些像这样的内容,但我不确定如何构建查询本身。
desc 'Change call duration format'
task calls_format_fix: :environment do
# Service::CallsReport.where('duration')...
# all nums before 'm' * 60 + nums before 's'.. then remove all alpha characters.. (do this with regex? ([0-9]*)m\s+([0-9]*)s)
end
答案 0 :(得分:0)
想出来!这是我的代码和查询,其中包含我正在做的更改列值的注释。不确定这是最好的解决方案,但它确实有效!
desc 'Change call duration format from minutes and seconds to just seconds'
task calls_reformat: :environment do
#store all calls in durationValues
durationValues = Service::CallsReport.all
#loop through each as 'call'
durationValues.each do |call|
#regex to capture minutes and seconds
call.duration.match(/([0-9]*)m\s+([0-9]*)s/)
#store the first match ($1) and multiply it by 60 in minToSec
minToSec = $1.to_i * 60
#add minToSec to matched seconds from regex ($2)
totalValue = minToSec + $2.to_i
#update the value of call duration
call.update(duration: totalValue)
end
end