2016-07-20 113 views
0

有人可以解释我这个MySQL查询:SQL查询调试

SELECT E.*, 
LAST_DAY(
    STR_TO_DATE(
    concat(
    LPAD(
     month(
     STR_TO_DATE(SUBSTRING(C.month, 1, 3),'%b')), 2, 0 
    ), '/', '01', '/', C.year),'%m/%d/%Y')) as calendar_date 

我不明白它选择什么日期....一周或?

+0

如果没有查询的其余部分以及所用表格的相关信息,很难知道。 – Uueerdo

+0

它返回月份的最后一天的日期(或日期时间)(如28日29日30日或31日,但以全日期格式,基于通过别名表c进入的日期。 sorta创建一个新的字符串,使日期成为本月的第一个日期,但是外部封装器会带回本月的最后一天,因此,calendar_date将看起来像'2016-09-30',例如 – Drew

+0

这个不是合法的查询,它没有FROM子句 – Hogan

回答

0

基础上STR_TO_DATE的使用%b和阅读以下内容: MySQL: STR_TO_DATE Function

的数据将必须有像JAN FEB MAR这样的日期信息来解释3次使用的子字符串。正如评论所说,它返回月份这样的最后日期为

2006-01-31 
2016-09-30 

MySQL手册页面str_to_date()LPAD()

至于LPAD,一个左垫月份与领先的最左侧的0。在这种情况下,只有一个,所以7将会在7月份进入07。 的2016-7-31后来不会很开心。但是一个Date2016-07-31会。

0

也许,
c.month是 '月', '月',...
和c.year是任何一年(2016年,2017年,...)。

return is:
该c.month在该c.year的最后一天。

编辑
为了让它变得更好,你可以不喜欢它:

select last_day(STR_TO_DATE(concat(C.year,', ' C.month), '%Y, %M'));