mysql从时间戳获取月份不起作用

mysql从时间戳获取月份不起作用,mysql,timestamp,Mysql,Timestamp,我有一个从数据库中提取正确数据的查询,但它不会返回时间戳中的月份。在timestamp列中,我得到一个空值,即使时间戳存在。 它作为bigInt存储在数据库中(这不是我的主意) 我需要的是这样返回的日期: Course | fcpd | Month 216 0.5 04 但我得到: Course | fcpd | Month 216 0.5 null SELECT mdl_quiz.course, mdl_quiz.fcpd, M

我有一个从数据库中提取正确数据的查询,但它不会返回时间戳中的月份。在timestamp列中,我得到一个空值,即使时间戳存在。 它作为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

有人能指出我哪里出错了吗?

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

MONTH(mdl_quiz_grades.timemodified)
变成

MONTH(FROM_UNIXTIME(mdl_quiz_grades.timemodified))
阅读更多关于它的信息


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

你能通过写一句话来解释为什么这样做来改进答案吗?我遇到了这个问题,因为MONTH()函数似乎以GMT返回月份。在不同的时区中,月份和年份可以提前或晚几个小时更改。例如,1483228799在格林尼治标准时间是2016年12月31日,而在印度已经是2017年1月1日(格林尼治标准时间+5:30)。正因为如此,我无法获得每月分组的查询的准确结果(从_UNIXTIME(timestamp))。@fancyPants您有什么建议来解决这个问题吗?我试图获得表中每个月的条目数。@rineez问题中的数据类型是一个整数(正好是一个时间戳)。将数据存储为实际的数据类型时间戳。这将考虑时区并在内部存储为整数,但显示为“datetime”。那么您就不需要from_unixtime()函数,可以直接使用month()函数。@fancyPants from_unixtime对我来说一点问题都没有。这是一个月的功能,似乎是硬编码的GMT造成的问题,我。请完全阅读我上面的评论。@rinez是的,我建议你也完全阅读我上面的评论。解决方案是数据类型!
"SELECT count(*) as records FROM sms WHERE MONTH(tarih)=MONTH(NOW()) and ceptel='"&ceptel&"'"