SQL查询调试

时间:2016-07-20 16:13:08

标签: php mysql sql

有人可以解释一下这个mysql查询:

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

我不明白它选择的日期......一周,还是?

2 个答案:

答案 0 :(得分:0)

也许,
c.month是' 1月',' 2月',...
和c.year是任何一年(2016年,2017年,......)
返回是:
c.month的最后一天。

修改
为了让它变得更好,你可以这样做:

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

答案 1 :(得分:0)

根据str_to_date使用%b并阅读以下内容: MySQL: STR_TO_DATE Function

数据必须有像JAN FEB MAR这样的日期信息,它解释了3用法的子串。如评论中所述,它返回月份的最后日期,例如

2006-01-31
2016-09-30

str_to_date()LPAD()

的MySQL手册页

对于LPAD来说,那个月剩下最左边的0和0。在这种情况下只有一个,所以7将转到07,例如7月。 Date的{​​{1}}以后不会高兴。但2016-7-31Date