【问题标题】:mysql get month from timestamp not workingmysql从时间戳获取月份不起作用
【发布时间】:2013-04-18 14:23:23
【问题描述】:

我有一个从数据库中提取正确数据的查询,但它没有返回时间戳中的月份。在时间戳列中,我得到一个空值,即使时间戳存在。 它作为 bigInt 存储在数据库中(这不是我的想法)。

我需要的是这样返回的日期:

Course |  fcpd   |   Month
216    0.5         04

但我明白了:

Course |  fcpd   |   Month
216    0.5        null

SELECT mdl_quiz.course, mdl_quiz.fcpd, MONTH(mdl_quiz_grades.timemodified) as Month FROM mdl_quiz INNER JOIN mdl_quiz_grades ON mdl_quiz.course = mdl_quiz_grades.quiz WHERE mdl_quiz_grades.userid = 9428 AND mdl_quiz.course = 215

谁能指出我哪里出错了?

【问题讨论】:

    标签: mysql timestamp


    【解决方案1】:

    您需要先将时间戳转换回日期,然后才能应用MONTH() 函数。

    MONTH(mdl_quiz_grades.timemodified)
    

    变成

    MONTH(FROM_UNIXTIME(mdl_quiz_grades.timemodified))
    

    阅读更多关于它的信息here

    作为旁注,int 足以作为时间戳,bigint 不是必需的。时间戳是一个 32 位的数字,这就是为什么它可以保存 2038 年 1 月 19 日的最大日期。

    【讨论】:

    • 我遇到了麻烦,因为 MONTH() 函数似乎返回格林威治标准时间的月份。在不同的时区,月份和年份可能会提前或推迟几个小时。例如,1483228799 在 GMT 中是 2016 年 12 月 31 日,而在印度 (GMT+5:30) 已经是 2017 年 1 月 1 日。因此,对于在 MONTH(FROM_UNIXTIME(timestamp)) 执行 GROUP BY 的查询,我无法获得准确的结果。
    • @fancyPants 你对解决这个问题有什么建议吗?我正在尝试获取表中条目的每月计数。
    • @rineez 这里问题中的数据类型是整数(恰好是时间戳)。将您的数据存储为实际的数据类型时间戳。这将时区和内部存储视为整数,但显示为“日期时间”。那么就不需要from_unixtime()函数,直接使用month()函数即可。
    • @fancyPants FROM_UNIXTIME 对我来说根本不是问题。它是 MONTH 函数,似乎是为 GMT 硬编码的,这对我来说是个问题。请完整阅读我上面的评论。
    • @rineez 是的,我建议你也完全阅读我上面的评论。解决方案是数据类型!
    【解决方案2】:
    "SELECT count(*) as records FROM sms WHERE MONTH(tarih)=MONTH(NOW()) and ceptel='"&ceptel&"'"
    

    【讨论】:

    • 您能否通过写下一句话来解释为什么会这样来改进答案?
    猜你喜欢
    • 2013-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多