我在数据库中有一些日期/事件,我想按月排序(年份无关紧要) - 现在所有时间戳都在名为eventDate的列中的unix中。如何进行查询?
SELECT * FROM calendar ORDER BY eventDate
显然对它们进行了分类,但我想确保所有年份的所有事件按月分组 - 然后显然需要安排它们1月,2月,3月等。
有什么建议吗?
谢谢!
答案 0 :(得分:3)
您可以使用FROM_UNIXTIME()函数+ MONTH()函数。
SELECT MONTH(FROM_UNIXTIME(0));
-- 12
但是没有理由在实时时间戳上存储unix时间戳(YYYY-MM-DD HH:II:SS)。 RDBMS具有操作日期的功能,如果你真的需要unix时间戳(我从不这样做,TBH),你可以使用UNIX_TIMESTAMP函数。
答案 1 :(得分:2)
使用unix时间有很多非常好的理由。良好的数据库设计极大地影响了运行数据库和网站的成本,尤其是成功繁忙的数据库和网站。
我所知道的最好的情况是...... 一个非常繁忙的服务器,并且需要存储时间数据但实际访问的时间数据与数据库中实际进行的读写次数相比很少。它需要cpu资源来执行那些时间数据的所有操作,所以除非你绝对必须这样做。
一个真实的例子是我自己的。我们需要4个前端Web服务器,并且会增加更多。他们也老了,需要更新。看着需要的6台替换服务器,这将花费我们一大笔钱。决定看看我们在做什么。我们现在有2台前端服务器而不是4台或6台。它需要什么?优化数据库结构和查询以及从中插入和读取数据的代码。
考虑到你的确切考虑的一个例子...更改了1行php代码,将时间列更改为unix而不是yyyy-dd-mm hh:mm:ss,添加了时间列的索引,并且一次操作从0.08秒开始到0.00031秒开始完成。 对cpu资源的多重影响是巨大的。下一个排队的操作执行得更快...等等。
这就是为什么人们有数据库设计师的工作......这真的很重要。
当然如果你的网站很慢而且不忙......可能没有人会注意到。 但如果你成功了,那就重要了。 如果你有一个繁忙的网站,你的服务器变得迟钝......看看这样的事情。您可能不需要新的盒子或更多的内存,您可能需要清理代码并优化数据库。
时间戳,它们的形式以及它们的使用和存储方式DO MATTER。